美文网首页
__proto__、prototype和constructor总

__proto__、prototype和constructor总

作者: 木子哥 | 来源:发表于2018-02-11 14:19 被阅读0次

    一图胜千言。


    首先,我的理解__proto__constructor 是对象(函数)的一个属性,类似指针,指向了其他对象。而 xxx.prototype 是一个对象

    1. 对象 __proto__属性的指向这个对象的原型对象,在对象实例化过程中指定。
    2. prototype 即为函数对象的原型对象,普通对象没有这个属性。
    3. 对象 constructor属性的值是这个对象的原型对象“继承”过来的,所以对象和这个对象的原型对象的 constructor属性 共同指向了这个对象的构造函数

    有点绕,下面举图中 function Foo() 的例子说明。

    //  构造函数Foo
    function Foo(name) {
      this.name = name
    };
    
    //  通过Foo构造函数创建出两个对象实例
    let f1 = new Foo('f1');
    let f2 = new Foo('f2');
    
    //  这两个对象实例都是从Foo构造函数的原型对象继承而来的,它们的原型对象相同,所以__proto__指向也相同。
    console.log(f1.__proto__ === f2.__proto__);
    
    //  这两个对象实例的原型对象与构造函数的原型对象相同
    console.log(f1.__proto__ === Foo.prototype);
    console.log(f2.__proto__ === Foo.prototype);
    

    这篇文章讲得很透彻,包括ObjectFunction 谁先出现的鸡蛋问题。

    参考资料

    相关文章

      网友评论

          本文标题:__proto__、prototype和constructor总

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