首先说一下原型链:
每一个构造函数都有一个原型对象,原型对象都有一个指向构造函数的指针。而实例化的对象都包含一个指向原型对象的内部指针,当我们让一个原型对象等于另一个实例化的对象的时候,显然此时的原型对象就会重复上面的步骤,如果再继续添加实例化的对象,就这样构成了原型链。值得提醒的是,所有的创建的对象或者是JS内部的对象,以及其他的引用类型都是继承来至Object 对象。如下图所示:
1、确定原型与实例之间的关系:
使用instanceOf方法来鉴别
function Person () {}
Person instanceOf Object; // true
使用isPrototyoeOf 方法鉴别
2、借用构造函数来实现继承;
function SuperType() {
this.color = [ "red", "blue" ];
}
function SubType () {
SuperType.call(this);
}
var color1 = new SubType();
alert(color1.color); // red,blur;
2、 组合式继承;
它是在借用构造函数的基础之上实现的
除了继承原型对象的方法之外,可在自己的内部添加prototype方法;
function SuperType(name) {
this.name = name;
this.color = ["red", "blue"];
SuperType.protoType.sayName = function() {
alert(name);
}
}
function Subtype (name, age) {
// 继承SuperType
SuperType.call(this, name);
this.age = age;
}
SubType.prototype = new SuperType();
SubType.prototype.sayNmae = {
function () {
alert(this.age);
}
}