实现原型链的一种基本模式,其代码大致如下:
function SuperType() {
this.property = true;
}
SuperType.prototype.getSuperValue = function() {
return this.property;
};
function SubType() {
this.subproperty = false;
}
//继承了SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function() {
return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true
//检验instance实例是否拥有property属性
alert(instance.hasOwnProperty("property"));//false
//其实property属性存在于SubTyped的原型中,下面检验
function hasPrototypeProperty(object,name) {
return !object.hasOwnProperty(name) && (name in object);
}
alert(hasPrototypeProperty(instance,"property")); //true
以上代码定义了两个类型:SuperType和SubType,每个类型分别有一个属性和方法。他们主要区别是SubType继承了SuperType,而继承是通过创建SuperType的实例,并将该实例赋给SubType.prototype实现的。实现的本质是重写原型对象,代之以一个新类型的实例。所以说SubType Prototype已经成为SuperType的实例,发生的变化是:下图红色标示【1】证明SubType Prototype 成为对象实例,【2】表明它继承了SuperType的属性property;这些都有在上面的代码验证,两个弹窗
上图画出了代码实现后,对象实例,构造函数,对象原型之间的关系