__proto__、prototype和constructor总

2018-02-11  本文已影响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 谁先出现的鸡蛋问题。

参考资料

上一篇 下一篇

猜你喜欢

热点阅读