美文网首页
JavaScript原型到原型链的理解

JavaScript原型到原型链的理解

作者: 丶丶夏天 | 来源:发表于2017-06-24 15:08 被阅读28次

    当通过一个构造函数创建一个对象的时候

    function Person() {
    }
    var a = new Person();
    

    该对象都有一个 _ __proto _ __属性,指向它的原型对象(假设叫A),同时构造函数Person也有个prototype属性指向这个原型对象A,这个原型对象A有个constructor属性指向构造函数Person。

    即:对象a的_ proto __ 指向构造函数Person的 prototype( 要注意的是这里的 _proto __是依赖构造函数Person的prototype来找到原型对象的,它本身没有直接找到原型对象的能力 ),他们共同指向原型对象A

    如下图:

    150F472A-3680-43BF-9BA4-3172636018E4.png

    当读取实例的属性时,如果找不到,就会查找与对象关联的原型对象中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。

    function Person() {
    }
    Person.prototype.age = '原型对象中的age';
    var a = new Person();
    a.name = 'a的name';
    console.log(a.name) //输出: a的name
    console.log(a.age) // 输出:原型对象中的age
    

    原型对象A也是对象,是对象就可以用构造函数来创建

    var A = new Object();
    

    所以原型对象Person.prototype(即A)的 _ _proto __ 指向构造函数的 prototype,共同指向Object.prototype

    3.png

    那 Object.prototype 的原型呢?为null,就是说原型链到Object.prototype 就到头了
    最后我用这张图整理一下思路,第二排表示构造函数,第一排表示原型对象,图中原型对象和构造函数之间的constructor和prototype关系省略没画


    总结

    参考:https://segmentfault.com/a/1190000008959943

    相关文章

      网友评论

          本文标题:JavaScript原型到原型链的理解

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