原型,js中的一個對象,用於定義其他對象的屬性和方法,每個構造函數都有一個prototype屬性,這個屬性是一個指針,指向一個原型對象,當創建新對象時,這個新物件會從其建構函式的prototype屬性繼承屬性和方法。原型鏈,當試圖存取物件的屬性時,js會先檢查這個物件是否有這個屬性,如果沒有,那麼js就會轉向這個物件的原型,如果原型物件也沒有這個屬性,會繼續尋找原型的原型。
本教學作業系統:windows10系統、DELL G3電腦。
原型(Prototype)和原型鏈(Prototype chain)是物件導向程式設計中的一個重要概念,特別是在JavaScript這種支援動態原型的語言中。理解原型和原型鏈對於理解如何建立和使用對象,以及如何呼叫對象的方法至關重要。
原型(Prototype):
原型是JavaScript中的一個對象,用來定義其他物件的屬性和方法。每個建構函式都有一個prototype屬性,這個屬性是一個指針,指向一個原型物件。當建立新物件時,這個新物件會從其建構函數的prototype屬性(即原型物件)繼承屬性和方法。
例如:
function Person(name) { this.name = name; } Person.prototype.sayHello = function() { return 'Hello, my name is ' + this.name; }; let person1 = new Person('Alice'); let person2 = new Person('Bob'); console.log(person1.sayHello()); // 输出: 'Hello, my name is Alice' console.log(person2.sayHello()); // 输出: 'Hello, my name is Bob'
在上面的例子中,我們定義了一個Person建構函數,並透過Person.prototype定義了一個sayHello方法。然後我們創建了兩個Person對象,它們都繼承了sayHello方法。這是因為它們都是從Person.prototype這個原型物件上繼承的。
原型鏈(Prototype chain):
當試圖存取物件的屬性時,JavaScript會先檢查這個物件是否有這個屬性。如果沒有,那麼JavaScript就會轉向這個物件的原型(即建構函數的prototype屬性)。如果原型物件也沒有這個屬性,那麼JavaScript會繼續尋找原型的原型,以此類推,直到找到一個有該屬性的對象,或達到原型鏈的頂端(即null)。這就是所謂的原型鏈。
例如:
function Person(name) { this.name = name; } Person.prototype.sayHello = function() { return 'Hello, my name is ' + this.name; }; let person1 = new Person('Alice'); delete person1.sayHello; // 删除person1的sayHello属性 console.log(person1.sayHello()); // 输出: 'Hello, my name is Alice'
在上面的範例中,我們刪除了person1的sayHello屬性。當我們試圖存取person1.sayHello()時,JavaScript首先檢查person1是否有sayHello屬性。由於person1沒有這個屬性,JavaScript會轉向person1的原型(即Person.prototype),那裡有sayHello方法,因此它被呼叫。這就是原型鏈的作用:它提供了一種方式來共享物件的屬性和方法,即使這些屬性和方法在物件本身上沒有定義。
以上是什麼是原型和原型鏈的詳細內容。更多資訊請關注PHP中文網其他相關文章!