美文网首页
面向对象——原型链

面向对象——原型链

作者: DJMG | 来源:发表于2017-04-08 11:15 被阅读0次

    原型链-----实例对象于原型之间的连接,具体含义:

    利用前一章的例子

    function Aaa(){ }

    Aaa.prototype.num = 10;

    var a1 = new Aaa();                    

    alert( a1.num );            //10

    思考一个问题,为什么对象可以找到原型下的方法,“Aaa.prototype.num= 10;”num方法应该是在Aaa.prototype下的,为什么a1也可以调用?

    a1(实例)和Aaa.prototype(原型)之间有个原型链:__proto__,当在实例下找不到方法的时候通过原型链找到原型下的方法

    第二个问题,当函数Aaa内部有“this.num=20;”这时候alert的结果是20,可以得出函数内部的优先级大于原型下的优先级,可以类比成css中的class和id。它的原理其实就是实例下面已经有了num属性,调用的时候就直接返回这个num的值,因此原型下仍然拥有这个num属性就不会被查找到。

    那么原型链只是实例和原型那一条链子吗?

    原型链的最外层是:Object.prototype

    a1.__proto__ = Aaa.prototype;

    Aaa.prototype.__proto__ = Object.prototype;

    function Aaa(){ }

    Object.prototype.num = 30;

    var a1 = new Aaa();

    alert( a1.num );            //30

    在a1和a1.prototype下都没num方法时,就会继续向外查找,在Object.prototype下能看到num方法。

    相关文章

      网友评论

          本文标题:面向对象——原型链

          本文链接:https://www.haomeiwen.com/subject/hehlattx.html