撿起JavaScript(3)

原型鏈

prototype和__proto__之間的關係。學習

function ABC() {}
var abc = new ABC()

咱們知道ABC有個prototype屬性,當new出一個新變量abc,其中abc含有__proto__屬性,爲了區別對待,借鑑你們的廣泛認識,其中稱prototype爲顯式原型、__proto__爲隱式原型。prototype

有幾個概念須要描述一下。rest

  1. 隱式原型的對象數據不單單隻和當前變量綁定,會更改類ABC的顯式原型的對象數據。
  2. 顯式原型的改變會影響隱式原型,一樣隱式原型也會顯式原型。
  3. 變量abc的隱式原型和ABC的顯式原型是等效的。

OK,經過下面代碼截圖就很能說明問題。


code

方法調用順序過程

  1. 變量屬性方法
  2. __proto__屬性方法
  3. 沿着原型鏈查找對應的方法
  4. 都沒找到報錯
function ABC () {}
var abc = new ABC()
// 顯然具備以下的關係
// abc instanceof ABC instanceof Object

abc.say1 = () => {
    console.log('say1')
}
ABC.prototype.say2 = () => {
    console.log('say2')
}
Object.prototype.say3 = () => {
    console.log('say3')
}

abc.say1() // 調用本身的方法
abc.say2() // 查找本身的__proto__方法,即ABC的prototype原型方法
abc.say3() // 沿着原型鏈查找到Object的prototype原型方法
abc.say4() // 報錯,Uncaught TypeError: abc.say4 is not a function

調用屬性名,也是如此。。。對象

心情小記

終於有時間來寫寫個人JS點滴,工做事太多,最近由於工做緣由還在學習Lua和Nginx,以及春哥的Openresty,哎😔。。。blog

相關文章
相關標籤/搜索