__proto__、prototype和constructor总结

一图胜千言。


首先,我的理解__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 谁先出现的鸡蛋问题。

参考资料

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容