javascript构造函数继承

一.传统prototy继承

function Parent() {
    this.name = "thisIsName";
}
Parent.prototype.sayName = function() {
    return this.name;
};

function Child() {
    this.age = "thisIsAge";
}

Child.prototype = new Parent();/指向Parent实例(包括实例的属性和原型)
Child.prototype.constructor = Child;

Child.prototype.sayAge = function() {
    return this.age;
};

var c = new Child();
console.log(c.name);
console.log(c.age);
console.log(c.sayName());
console.log(c.sayAge());

二.利用对象空间继承

创建一个新的构造函数F,为空对象,几乎不占内存

function Chinese() {}
Chinese.prototype.nationality = "Chinese";
function Person(name, age) {
    this.name = name;
    this.age = age;
}
function F(){}; //空对象几乎不占用内存
F.prototype = Chinese.prototype; //指向同一个原型,互相影响
Person.prototype = new F();//new后地址指向F.prototype,F.proptotype也是一个指向原型的地址,故操作Person.prototype不会影响到父类的原型
Person.prototype.constructor = Person;

Person.prototype.sayName = function() { //Person的prototype中的方法和属性需要在继承之后定义
    console.log(this.name);
};
var p1 = new Person("Oli", 18);
console.log(p1.nationality); //Chinese
p1.sayName(); //Oli

若想继承非原型上的属性可增加Chiness.call(this);

function Chinese() {
    this.hhh = ‘hhh‘;//新增!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    this.hello = ‘hello‘;//新增!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
}
Chinese.prototype.nationality = "Chinese";

function Person(name, age) {
    Chinese.call(this);//新增!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    this.name = name;
    this.age = age;
}

function F(){}; //空对象几乎不占用内存
F.prototype = Chinese.prototype; //指向同一个原型,互相影响
Person.prototype = new F();//new后地址指向F.prototype,F.proptotype也是一个指向原型的地址,故操作Person.prototype不会影响到父类的原型
Person.prototype.constructor = Person;

Person.prototype.sayName = function() { //Person的prototype中的方法和属性需要在继承之后定义
    console.log(this.name);
};

var p1 = new Person("Oli", 18);
console.log(p1.nationality); //Chinese
p1.sayName(); //Oli
console.log(p1.hhh);//新增!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
console.log(p1.hello);//新增!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

推荐链接:https://segmentfault.com/a/1190000004906911

http://javascript.ruanyifeng.com/oop/pattern.html#toc0

时间: 2024-10-11 18:20:23

javascript构造函数继承的相关文章

javascript 构造函数继承

构造函数的继承 第一部分介绍了如何"封装"数据和方法,以及如何从原型对象生成实例.现在介绍的是,对象之间的"继承"的五种方法.比如,现在有一个"动物"对象的构造函数.  function Animal(){    this.species = "动物";  }还有一个"猫"对象的构造函数.  function Cat(name,color){    this.name = name;    this.col

javascript继承,原型继承,借用构造函数继承,混合继承

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

JavaScript构造函数+原型创建对象,原型链+借用构造函数模式继承父类练习

虽然经常说是做前端开发的,但常常使用的技术反而是JQuery比较多一点.在JavaScript的使用上相对而言少些.尤其是在创建对象使用原型链继承上面,在项目开发中很少用到.所以今天做个demo练习一下,以后忘记了也可以照搬一下. 说明一下: 1. Demo中使用的是构造函数+原型模式创建的对象.构造函数中存储对象实例使用的属性,原型模式增加实例使用的方法. 2. Demo中的继承分为两个方面.一个是属性继承,使用的是借用构造函数模式 call()方法.另一个是方法继承,这个就是使用原型方式继承

javascript 封装 构造函数继承 非构造函数继承

1 封装 把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象 1.1 简单封装:var cat1 = {}; // 创建一个空对象 cat1.name = "大毛"; // 按照原型对象的属性赋值 cat1.color = "黄色"; 1.2 构造函数Prototype模式 Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象.这个对象的

Javascript继承2:创建即继承----构造函数继承

//声明父类 function SuperClass(id){ //值类型公有属性 this.id = id; //引用类型公有属性 this.books = ['Html','Css']; } //父类声明原型方法 SuperClass.prototype.showBooks = function(){ console.log(this.books) } //声明子类 function ChildClass(id){ //继承父类 SuperClass.call(this,id) } var

JavaScript继承-借用构造函数继承

借用构造函数继承是在子类型构造函数的内部调用超类型狗在函数,通过使用apply()和call()方法 function girlFriend(){ this.girls = ['chen','wang','zhu']; } function Person(){ girlFriend.call(this,20); } var wang = new Person(); var zhu = new Person(); wang.girls.push('zhang'); console.log(wang

[JavaScript原型继承理解一]

转:http://www.cnblogs.com/harolei/p/3740354.html 对于JavaScript的继承和原型链,虽然之前自己看了书也听了session,但还是一直觉得云里雾里,不禁感叹JavaScript真是一门神奇的语言.这次经过Sponsor的一对一辅导和自己回来后反复思考,总算觉得把其中的精妙领悟一二了. 1. JavaScript创建对象 在面向对象语言中,通常通过定义类然后再进行实例化来创建多个具有相同属性和方法的对象.但是在JavaScript中并没有类的概念

JavaScript之继承(原型链)

我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法.JavaScript不支持签名,因此只有实现继承.其中实现继承主要是依赖于原型链的.下面我将以原型链为重点说说继承的几种主要的方式: 原型链继承 借用构造函数继承 组合继承(重点) 第一部分:原型链继承 A 要说原型链继承,不得不首先介绍一下原型链的概念. 想象一下,如果使原型对象等于另一个对象的实例,则此时原型对象将包含一个指向另一

Javascript 组合继承 原型链继承 寄生继承

Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { console.log(this.name); }; function SubType(name, age) { //通过ca