原型鏈.png
注解
- 紅虛線即原型鏈消约,各類實例都是通過原型鏈繼承到各數(shù)據(jù)類型本身的方法和屬性。比如Object原型對象包含著對象的原生方法员帮。
- 函數(shù)實例通過原型鏈指向了Object的原型或粮,所以函數(shù)實例也可作為對象使用。比如Jquery捞高,
Jquery.ajax()
就是當對象使用氯材,Jquery("div")
就是當函數(shù)使用。
相關(guān)擴展
-
instanceof
運算符用于測試構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在對象的原型鏈中的任何位置硝岗。是的話氢哮,即此對象就是此構(gòu)造函數(shù)的實例。new Function() instanceof Object // true // 函數(shù)是 Object的實例型檀。
hasOwnProperty
判斷一個對象本身是否有此名稱的屬性冗尤,此方法無法檢查該對象的原型鏈中是否具有該屬性,該屬性必須是對象本身的一個成員胀溺。in
判斷的是對象的所有屬性裂七,包括對象實例及其原型鏈的屬性;改變一個對象的
Prototype
屬性,是一個非常影響性能的操作仓坞,如果你關(guān)心性能背零,你就不應(yīng)該在一個對象中修改它的 Prototype.。比如obj.__proto__ =
或者Object.setPrototypeOf
等操作无埃。可以使用Object.create()
創(chuàng)建一個新對象徙瓶,并指定某個對象為它的原型對象。當
Object.prototype.__proto__
已被大多數(shù)瀏覽器廠商所支持的今天嫉称,其存在和確切行為僅在ECMAScript 2015規(guī)范中被標準化為傳統(tǒng)功能侦镇,以確保Web瀏覽器的兼容性。為了更好的支持澎埠,建議只使用Object.getPrototypeOf()
虽缕。Object.getPrototypeOf()
是替代__proto__
用來獲取實例對象的原型始藕,并不能獲取構(gòu)造函數(shù)的prototype
蒲稳。根據(jù)方法的名稱理解氮趋,很容易混淆它的用法。