- 我们都知道构造函数、原型和实例直接的关系,如果我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然此时的原型对象将包含一个指向另一个原型的指针,相应的另一个原型中也包含着一个指向另一个构造函数的指针。
- 原型链:利用原型让一个引用类型继承另外一个引用类型的属性和方法。
- 简单继承(原型继承)
- 类继承(模版继承或借用构造函数继承)
- 混合使用继承实现完整的继承
//原型继承方式
//父类
function Sup(name,age){
this.name = name;
this.age = age;
}
//子类
function Sub(sex){
this.sex = sex;
}
//父类把值传给子类的原型对象,可以进行继承
Sub.prototype = new Sup('z3',20);
var b = new Sub('男');
console.log(b.name);
console.log(b.age);
console.log(b.sex);
//利用call,apply方式实现类继承
//只能继承模板,不能继承原型对象(借用构造函数的方式继承)
function Sup(name,age){
this.name = name;
this.age = age;
}
//父类原型对象属性
Sup.prototype.id = 10;
function Sub(name,age,sex){
Sup.call(this,name,age);
this.sex = sex;
}
var b = new Sub('z311',2011,'男11');
console.log(b.name);
console.log(b.age);
console.log(b.sex);
//原型对象无法继承
console.log(b.id);
//利用原型继承+类继承=混合模式
function Sup(name,age){
this.name = name;
this.age = age;
}
Sup.prototype.id = 10;
Sup.prototype.sayName = function(){
console.log('我的名字:'+this.name);
}
//子类继承
function Sub(name,age,sex){
Sup.call(this,name,age); //借用构造函数继承
this.sex = sex;
}
//原型继承
Sub.prototype = new Sup();
var b = new Sub('z4',141,'女');
console.log(b.name);
console.log(b.age);
console.log(b.sex);
console.log(b.id);
b.sayName()