JavaScript 原型鏈是一種繼承機制,它允許對象共享另一個對象的屬性和方法。操作原型鏈主要包括以下幾個方面:
prototype
):要使一個對象成為其他對象的實例,需要將該對象作為構造函數的 prototype
屬性。例如,創建一個名為 Person
的構造函數:
function Person(name, age) {
this.name = name;
this.age = age;
}
在構造函數的 prototype
對象上添加方法,這樣所有實例都可以訪問這些方法。例如,為 Person
添加一個名為 greet
的方法:
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
通過調用構造函數創建新實例,這些實例會繼承 prototype
對象上的屬性和方法。例如,創建一個名為 person1
的實例,并調用其 greet
方法:
const person1 = new Person('Alice', 30);
person1.greet(); // 輸出:Hello, my name is Alice and I am 30 years old.
當訪問一個對象的屬性或方法時,JavaScript 會首先在該對象本身查找。如果沒有找到,JavaScript 會沿著原型鏈向上查找,直到找到該屬性或方法,或者到達原型鏈的頂端(null
)。
通過原型鏈,所有實例都可以繼承構造函數原型對象上的屬性和方法。這意味著,如果修改了構造函數的原型對象上的方法,所有實例都會受到影響。例如,修改 Person.prototype.greet
方法:
Person.prototype.greet = function() {
console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
};
const person2 = new Person('Bob', 25);
person2.greet(); // 輸出:Hi, my name is Bob and I am 25 years old.
通過這種方式,JavaScript 原型鏈提供了一種靈活且高效的繼承機制。