JavaScript 中 __proto__ 和 prototype 属性的区别是什么?

推荐答案

在 JavaScript 中,__proto__prototype 是两个与对象原型相关的属性,但它们的作用和使用场景有所不同。

  • __proto__ 是每个对象都有的属性,它指向该对象的原型(即其构造函数的 prototype 属性)。
  • prototype 是函数对象特有的属性,它指向一个对象,该对象包含了由该构造函数创建的所有实例共享的属性和方法。

本题详细解读

__proto__ 属性

  • __proto__ 是一个非标准的属性,但在大多数现代浏览器中得到了支持。
  • 它用于访问或设置对象的原型。
  • 当你访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会通过 __proto__ 链向上查找,直到找到该属性或方法,或者到达原型链的顶端(null)。

prototype 属性

  • prototype 是函数对象特有的属性,它指向一个对象,该对象包含了由该构造函数创建的所有实例共享的属性和方法。
  • 当你使用 new 关键字调用构造函数创建实例时,实例的 __proto__ 属性会被设置为构造函数的 prototype 属性。
-- -------------------- ---- -------
-------- ------------ -
  --------- - -----
-

---------------------- - ---------- -
  ------------------- -- ---- -- ---------------
--

----- ------ - --- ----------------
---------------------------- --- ------------------ -- ----
--------------- -- ------ -- ---- -- -----

区别总结

  • __proto__ 是实例对象的属性,指向其原型对象。
  • prototype 是构造函数的属性,指向一个对象,该对象包含了由该构造函数创建的所有实例共享的属性和方法。
  • 实例对象的 __proto__ 属性指向其构造函数的 prototype 属性。
纠错
反馈