JavaScript的原型链
原型链
原型链是JavaScript中实现继承的主要方法。
简单来说就是,有两个构造函数记为SuperType()和SubType(),让SubType的原型对象等于SuperType的实例,此时原型对象将含有指向另一个原型的指针,那么这个原型对象也将包含另一个构造函数的指针,就实现了继承。
function superType() {
this.property = true;
}// 定义superType引用类型
superType.prototype.getSuperValue = function () {
return this.property;
}// superType的方法
function subType() {
this.subpropertype = false;
}
subType.prototype = new superType();// 用上述原型链模式实现继承
subType.prototype.getSubValue = function () {
return this.subpropertype;
}// 定义subType的自己的方法
var test = new subType();
alert(test.getSubValue());// false
alert(test.getSuperValue());// true
/*通过subType的实例能够调用superType定义的方法,继承成功*/
该继承中,原型链的梳理
JavaScript的原型搜索机制,当读取某一个实例属性时,会在实例中搜索该属性。如果没有找到该属性,则会继续搜索实例的原型。当搜素实例的原型时会沿着原型链继续向上搜索。
即 实例–>subType.prototype–>superType.prototype
回想之前学过的toString(); valueOf();等方法,都是继承而来的,所有引用类型都默认继承了object,这个继承就是通过原型链实现的。
如何确定实例和原型的关系
有两种方式能够判断一个实例是不是某一个原型链中的实例
instanceof操作符和isPrototypeOf();方法
/*instanceof操作符*/
alert(test instanceof Object);// true
alert(test instanceof superType);// true
alert(test instanceof subType);// true
/*isPrototypeOf()方法*/
alert(Object.prototype.isPrototypeOf(test));// true
alert(subType.prototype.isPrototypeOf(test));// true
alert(superType.prototype.isPrototypeOf(test));// true