javascript (对象继承)原型链

版权声明:本文为原创文章,未经博主允许不得转载,欢迎各种交流,共同进步。 https://blog.csdn.net/sinat_15951543/article/details/52371483

Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型。这个函数包括构造函数和普通函数.

JS中的继承,子函数通过把父函数实例化实现的。

如以下代码:
function SuperType111(){
    this.property=true;
}

SuperType111.prototype.getSuperValue = function(){
    return this.property;
};

function SubType222(){
    this.subproperty = false;
}

SubType222.prototype = new SuperType111();

SuperType111.prototype.getSubValue = function(){
    return this.subproperty;
};

var instance = new SubType222();

console.log(instance.getSuperValue());


instance 继承 了SubType222 ,SubType222集成父函数SuperType111

继承的原理:基于原型的搜索机制:当以读取模式访问一个实例属性时,首先会在实例中搜索该属性,如果没有找到该属性,则会继续搜索实例的原型。


而在以上用例得实际上,不是SubType222的原型constructor属性被重写了,而是SubType的原型指向了一个另外一个对象的SuperType的原型。

原型链的最末端是Object对象的原型对象。

因此,在原型链的关系中,可以说instance是Object,SuperType111 ,SubType222 任何一个类型的实例,用instanceof能判断。

值得注意的是:当子类型又需要重写超类中的某个方法,或者需要添加超类型中不存在的方法,添加方法的代码必须放在替换原型的语句之后。

原型链固然好用,可以用他来继承,但是也存在问题,就是如果子函数对其原型链上的属性进行修改的时候,会影响到超类型的属性,因为他们指针所指的地方是同一个。










猜你喜欢

转载自blog.csdn.net/sinat_15951543/article/details/52371483