首頁 >常見問題 >什麼是原型和原型鏈

什麼是原型和原型鏈

百草
百草原創
2023-11-09 17:59:482220瀏覽

原型,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn