JS 中 .__proto__ 与 .prototype 的关系与区别

简要说明如下:

  • .__proto__ 是对象的属性;.prototype 是构造函数的属性。

  • 两者的值都是原型对象。也就是说,两者的作用都是获取对象的原型对象。

  • 对于由构造函数创建的对象来说,o.__proto__ === o.constructor.prototype ——这是两者最直接的关联。

  • 对于 “对象字面量” 和由 Object.create(proto) 创建的对象来说,o.constructor === Object

  • 对于由 Object.create(null) 创建的对象来说,没有 .constructor,也就获取不到 .constructor.prototype。但可以通过 .__proto__ 来获取它的原型(null)。

补充说明

.__proto__ 原本是浏览器实现的私有属性,并不是语言标准。ES6 把这个属性标准化了,但在后来的版本中又弃用了,因此我们应该用以下方法代替它:

  • Getter: Object.getPrototypeOf(o)
  • Setter: Object.setPrototypeOf(o, proto)
标签: JavaScript
最后更新:2023-03-06 19:35:33

相关小抄