返回
原型与原型链
前端
2023-12-06 03:30:45
在日常学习编程中,经常会听到这样几个术语:原型、原型链、构造函数。那么它们之间究竟有什么关系呢?我将用这篇文章来解释它们之间的关系。
原型是什么?
原型是一个对象,它充当其他对象的模板。当创建一个新对象时,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
方法,然后调用该方法。