推荐答案
在 JavaScript 中,__proto__
和 prototype
是两个与对象原型相关的属性,但它们的作用和使用场景有所不同。
__proto__
是每个对象都有的属性,它指向该对象的原型(即其构造函数的prototype
属性)。prototype
是函数对象特有的属性,它指向一个对象,该对象包含了由该构造函数创建的所有实例共享的属性和方法。
本题详细解读
__proto__
属性
__proto__
是一个非标准的属性,但在大多数现代浏览器中得到了支持。- 它用于访问或设置对象的原型。
- 当你访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会通过
__proto__
链向上查找,直到找到该属性或方法,或者到达原型链的顶端(null
)。
const obj = {}; console.log(obj.__proto__ === Object.prototype); // true
prototype
属性
prototype
是函数对象特有的属性,它指向一个对象,该对象包含了由该构造函数创建的所有实例共享的属性和方法。- 当你使用
new
关键字调用构造函数创建实例时,实例的__proto__
属性会被设置为构造函数的prototype
属性。
-- -------------------- ---- ------- -------- ------------ - --------- - ----- - ---------------------- - ---------- - ------------------- -- ---- -- --------------- -- ----- ------ - --- ---------------- ---------------------------- --- ------------------ -- ---- --------------- -- ------ -- ---- -- -----
区别总结
__proto__
是实例对象的属性,指向其原型对象。prototype
是构造函数的属性,指向一个对象,该对象包含了由该构造函数创建的所有实例共享的属性和方法。- 实例对象的
__proto__
属性指向其构造函数的prototype
属性。