如何理解和描述「原型和原型鏈」

JavaScript中的對象,都有一個內置屬性[[Prototype]],
指向這個對象的原型對象。當查找一個屬性或方法時,
若是在當前對象中找不到定義,會繼續在當前對象的原型對象中查找;
若是原型對象中依然沒有找到,
會繼續在原型對象的原型中查找(原型也是對象,也有它本身的原型);
如此繼續,直到找到爲止,或者查找到最頂層的原型對象中也沒有找到,
就結束查找,返回undefined。能夠看出,這個查找過程是一個鏈式的查找,
每一個對象都有一個到它自身原型對象的連接,這些連接組成的整個鏈條就是原型鏈。
擁有相同原型的多個對象,他們的共同特徵正是經過這種查找模式體現出來的。

其實原型鏈就是多個對象經過 _proto_ 的方式鏈接起來,而且能夠向上尋找對應的屬性。這種關係,就是「原型鏈」。
對象的__proto__屬性指向原型,__proto__將對象和原型鏈接起來組成了原型鏈。

 

用一個簡單、明瞭、實際的例子來講明:函數

有一天,我想買一輛車,想知道這輛車從設計生產到出廠的一些過程,咱們假設這個過程就是這輛車的原型鏈:this

  

1. 有一個構造函數是製造這輛車的機器 function CarDemo(data) {
    this.name = data;
}
2. 這個構造函數建立的實例的原型,就是機器要使用的模具,也能夠說是設計圖

CarDemo.prototype = {
    color: red,
    size: 4800,
    brands: BBA
}
3. 而後生成出來的對象,就是這輛車,這輛車包括了設計圖上的全部屬性 var mycar = new CarDemo("zlz");

PS: 個人這輛車就繼承了構造函數 CarDemo 的原型裏的屬性: 
  mycar.color 是 red
  mycar.size 是 4800
  mycar.brands 是 BBA
等式關係:
CarDemo === CarDemo.prototype.constructor; mycar.__proto__ === CarDemo.prototype;


總結: 1. Object是全部對象的爸爸,全部對象均可以經過__proto__找到它。 2. Function是全部函數的爸爸,全部函數均可以經過__proto__找到它. 3. 函數的prototype是一個對象。 4. 對象的__proto__屬性指向原型,__proto__將對象和原型鏈接起來組成了原型鏈。

5. 對於來講,能夠經過找到一個原型對象,在該對象中定義了不少函數讓咱們來使用。
obj__proto__
相關文章
相關標籤/搜索