JavaScript 原型鏈?zhǔn)且环N繼承機(jī)制,它允許對(duì)象共享另一個(gè)對(duì)象的屬性和方法。操作原型鏈主要包括以下幾個(gè)方面:
prototype
):要使一個(gè)對(duì)象成為其他對(duì)象的實(shí)例,需要將該對(duì)象作為構(gòu)造函數(shù)的 prototype
屬性。例如,創(chuàng)建一個(gè)名為 Person
的構(gòu)造函數(shù):
function Person(name, age) {
this.name = name;
this.age = age;
}
在構(gòu)造函數(shù)的 prototype
對(duì)象上添加方法,這樣所有實(shí)例都可以訪問(wèn)這些方法。例如,為 Person
添加一個(gè)名為 greet
的方法:
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
通過(guò)調(diào)用構(gòu)造函數(shù)創(chuàng)建新實(shí)例,這些實(shí)例會(huì)繼承 prototype
對(duì)象上的屬性和方法。例如,創(chuàng)建一個(gè)名為 person1
的實(shí)例,并調(diào)用其 greet
方法:
const person1 = new Person('Alice', 30);
person1.greet(); // 輸出:Hello, my name is Alice and I am 30 years old.
當(dāng)訪問(wèn)一個(gè)對(duì)象的屬性或方法時(shí),JavaScript 會(huì)首先在該對(duì)象本身查找。如果沒(méi)有找到,JavaScript 會(huì)沿著原型鏈向上查找,直到找到該屬性或方法,或者到達(dá)原型鏈的頂端(null
)。
通過(guò)原型鏈,所有實(shí)例都可以繼承構(gòu)造函數(shù)原型對(duì)象上的屬性和方法。這意味著,如果修改了構(gòu)造函數(shù)的原型對(duì)象上的方法,所有實(shí)例都會(huì)受到影響。例如,修改 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.
通過(guò)這種方式,JavaScript 原型鏈提供了一種靈活且高效的繼承機(jī)制。