JavaScript 原型鏈是實現(xiàn)對象間繼承和共享屬性的主要機制。在 JavaScript 中,每個對象都有一個指向其原型的內(nèi)部鏈接。當試圖訪問一個對象的屬性時,如果該對象內(nèi)部不存在這個屬性,那么 JavaScript 引擎會沿著原型鏈向上查找,直到找到屬性或者到達原型鏈的頂端(null
)。
以下是原型鏈的運用方法:
創(chuàng)建構(gòu)造函數(shù):
首先,我們需要創(chuàng)建一個構(gòu)造函數(shù),它將作為我們創(chuàng)建的對象的基礎(chǔ)。構(gòu)造函數(shù)通常包含一個 prototype
屬性,該屬性指向一個原型對象。
function Person(name, age) {
this.name = name;
this.age = age;
}
在原型對象上定義屬性和方法:
接下來,我們在構(gòu)造函數(shù)的 prototype
對象上定義屬性和方法,這樣所有通過 Person
構(gòu)造函數(shù)創(chuàng)建的對象都可以訪問這些共享資源。
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
創(chuàng)建對象實例:
現(xiàn)在,我們可以使用 Person
構(gòu)造函數(shù)創(chuàng)建對象實例,并通過原型鏈訪問在 prototype
對象上定義的屬性和方法。
var person1 = new Person('Alice', 30);
var person2 = new Person('Bob', 25);
person1.sayHello(); // 輸出 "Hello, my name is Alice"
person2.sayHello(); // 輸出 "Hello, my name is Bob"
原型鏈繼承:
要實現(xiàn)原型鏈繼承,我們可以在一個構(gòu)造函數(shù)的原型對象上設(shè)置另一個構(gòu)造函數(shù)的引用。這樣,子類可以訪問父類的原型對象上的屬性和方法。
function Student(name, age, course) {
Person.call(this, name, age);
this.course = course;
}
// 設(shè)置 Student 的原型對象為 Person 的實例,實現(xiàn)繼承
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
// 在 Student 的原型對象上添加特定于學生的屬性和方法
Student.prototype.sayCourse = function() {
console.log('I am studying ' + this.course);
};
var student1 = new Student('Charlie', 22, 'JavaScript');
student1.sayHello(); // 輸出 "Hello, my name is Charlie"
student1.sayCourse(); // 輸出 "I am studying JavaScript"
通過以上方法,我們可以充分利用 JavaScript 原型鏈實現(xiàn)對象間的繼承和共享屬性。