什么是原型鏈?


JavaScript是面向對象的,每個實例對象都有一個__proto__屬性,該屬性指向它的原型對象,這個實例對象的構造函數有一個原型屬性prototype,與實例的proto屬性指向同一個對象。當一個對象在查找一個屬性的時候,自身沒有就會根據__proto__向它的原型進行查找,如果都沒有,則向它的原型的原型繼續查找,直到查到Object.prototype.proto_為null,這樣也就形成了原型鏈。

原型對象和實例之間有什么作用呢?

通過一個構造函數創建出來的多個實例,如果都要添加一個方法,給每個實例去添加並不是一個明智的選擇。這時就該用上原型了。

在實例的原型上添加一個方法,這個原型的所有實例便都有了這個方法。

var M = function (name) { this.name = name; }
var o3 = new M('o3')
  • 實例就是對象,在本例中o3就是實例,M就是構造函數。

  • 實例通過new一個構造函數生成的。

  • 從上圖中可以知道,實例的proto指向的是原型對象。

  • 實例的構造函數的prototype也是指向的原型對象。

  • 原型對象的construor指向的是構造函數。

    補充:

    只有函數有prototype,對象是沒有的。

    但是函數也是有proto的,因為函數也是對象。函數的proto指向的是Function.prototype。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM