返回

js中的__proto__和prototype的区别与关系

前端

在 JavaScript 中,protoprototype 是两个密切相关的概念,它们共同作用,定义了对象的继承关系。理解这两个概念对于理解 JavaScript 中的对象模型至关重要。

proto

proto 是一个内部属性,存在于每个对象中。它指向对象的原型对象。原型对象是用于创建该对象的构造函数的 prototype 属性。

prototype

prototype 是构造函数的属性。它是一个对象,包含该构造函数创建的所有对象的共享属性和方法。当使用 new 创建新对象时,该对象的 proto 被设置为构造函数的 prototype

区别

proto 是一个对象的内部属性,指向其原型对象,而 prototype 是构造函数的属性,包含所有通过该构造函数创建的对象共享的属性和方法。

关系

当创建新对象时,它的 proto 被设置为构造函数的 prototype 。这意味着新对象继承了 prototype 中定义的所有属性和方法。因此,proto 链接对象到其原型对象,而 prototype 链接构造函数到其创建的对象。

示例

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}.`);
};

const person1 = new Person('John');

console.log(person1.__proto__ === Person.prototype); // true
console.log(person1.greet()); // Hello, my name is John.

在上面的示例中,person1Person 构造函数创建的对象。person1. proto** 指向 ** Person.prototype**,后者包含 ** greet** 方法。因此,** person1** 可以访问并调用 ** greet** 方法。

结论

protoprototype 是 JavaScript 中对象的继承机制的重要组成部分。proto 链接对象到其原型对象,而 prototype 链接构造函数到其创建的对象。通过理解这两个概念,可以充分利用 JavaScript 中的对象模型,创建灵活且可维护的应用程序。