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