返回

原型和 __proto__浅析,揭秘JavaScript的继承机制

前端

原型

原型是 JavaScript 中一个特殊的对象,它包含了某个构造函数的所有实例共有的属性和方法。当创建一个新的实例对象时,JavaScript 会自动将实例对象的 proto 属性指向创建他的构造函数的原型对象。这意味着实例对象可以访问原型对象中的所有属性和方法,就像它们是实例对象自己的属性和方法一样。

例如,以下代码定义了一个 Person 构造函数,它包含了一个 name 属性和一个 greet 方法:

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

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

现在,我们可以使用 Person 构造函数创建一个新的实例对象:

const person = new Person('John');

person 实例对象具有一个 name 属性和一个 greet 方法,就像它们是 person 对象自己的属性和方法一样:

console.log(person.name); // John
person.greet(); // Hello, my name is John

proto

proto 是 JavaScript 中一个特殊的属性,它指向创建实例对象的构造函数的原型对象。这意味着实例对象的 proto 属性总是指向原型对象。

例如,以下代码获取 person 实例对象的 proto 属性:

const personProto = person.__proto__;

personProto 变量现在指向 Person 构造函数的原型对象。我们可以使用 personProto 变量来访问原型对象中的属性和方法,就像它们是 person 实例对象自己的属性和方法一样:

console.log(personProto.greet); // function greet() { console.log(`Hello, my name is ${this.name}`); }
personProto.greet(); // Hello, my name is John

原型和 proto 的区别

原型和 proto 是两个不同的概念,但它们密切相关。原型是 JavaScript 中一个特殊的对象,它包含了某个构造函数的所有实例共有的属性和方法。proto 是 JavaScript 中一个特殊的属性,它指向创建实例对象的构造函数的原型对象。

总结

原型和 proto 是 JavaScript 中两个重要的概念,它们共同构成了 JavaScript 的继承机制。通过理解原型和 proto 的概念,我们可以更好地理解 JavaScript 中的继承机制,并编写出更健壮、更可维护的代码。