__proto__
__proto__是每个 JavaScript 对象都具有的一个属性,它指向了该对象的原型。实际上,__proto__属性是访问对象原型的 getter/setter 方法。通过
__proto__属性,我们可以在运行时动态地获取和修改一个对象的原型链。示例:
1
2
3
4
5
6
7
8
9
10
11
12let animal = {
eats: true,
};
let rabbit = {
jumps: true,
};
rabbit.__proto__ = animal;
console.log(rabbit.jumps); // true
console.log(rabbit.eats); // true
prototype
prototype是函数对象特有的属性,在创建一个函数时,该函数会自动获得一个名为prototype的属性。当我们使用关键字
new来创建一个实例时,这个实例的__proto__会指向其构造函数的prototype。示例:
1
2
3
4
5
6
7
8function Animal(name) {
this.name = name;
}
Animal.prototype.eats = true;
let rabbit = new Animal("Rabbit");
console.log(rabbit.eats); // true
总结来说,__proto__ 是每个对象实例都有的内部属性,用于访问其原型;而 prototype 是函数对象特有的属性,用于构建由该函数创建的实例的原型链。JavaScript 中的原型链机制基于这两个概念,它们共同构成了 JavaScript 中对象之间继承关系的基础。