返回

原型与原型链

前端

在日常学习编程中,经常会听到这样几个术语:原型、原型链、构造函数。那么它们之间究竟有什么关系呢?我将用这篇文章来解释它们之间的关系。

原型是什么?

原型是一个对象,它充当其他对象的模板。当创建一个新对象时,JavaScript会创建一个该对象的原型副本,然后将新对象链接到该副本。这使得新对象可以访问原型的属性和方法。

原型链是什么?

原型链是一系列对象,每个对象都链接到它的原型。当一个对象找不到一个属性或方法时,它会沿着原型链向上查找,直到找到该属性或方法。

构造函数是什么?

构造函数是一个函数,它用于创建新对象。当调用一个构造函数时,JavaScript会创建一个新对象,然后将新对象链接到该构造函数的原型。

原型、原型链和构造函数之间的关系

  • 构造函数是一个函数,它用于创建新对象。
  • 当调用一个构造函数时,JavaScript会创建一个新对象,然后将新对象链接到该构造函数的原型。
  • 原型是一个对象,它充当其他对象的模板。
  • 当创建一个新对象时,JavaScript会创建一个该对象的原型副本,然后将新对象链接到该副本。
  • 原型链是一系列对象,每个对象都链接到它的原型。
  • 当一个对象找不到一个属性或方法时,它会沿着原型链向上查找,直到找到该属性或方法。

一个例子

以下是一个简单的例子,说明了原型、原型链和构造函数之间的关系:

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

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

const person1 = new Person('John');
person1.greet(); // Hello, my name is John.

在这个例子中,Person函数是一个构造函数。当我们调用Person函数时,JavaScript会创建一个新对象,然后将新对象链接到Person函数的原型。Person.prototype是一个对象,它充当其他Person对象的模板。它有一个名为greet的方法,该方法可以在任何Person对象上调用。

当我们调用person1.greet()时,JavaScript会首先在person1对象中查找greet方法。如果没有找到,它会沿着原型链向上查找,直到找到该方法。在Person.prototype对象中,它找到了greet方法,然后调用该方法。