js原型,原型鏈
阿新 • • 發佈:2019-01-04
之前面試的時候遇到過原型和原型鏈方面的題目,具體的已經忘了,只記得當時回答的稀裡糊塗,今天查了一些資料,把自己所理解的寫出來,加深記憶。
1,前提
在js中,物件都有__proto__屬性,一般這個是被稱為隱式的原型,該隱式原型指向構造該物件的建構函式的原型。
函式比較特殊,它除了和其他物件一樣有__proto__屬性,還有自己特有的屬性----prototype,這個屬性是一個指標,指向一個包含所有例項共享的屬性和方法的物件,稱之為原型物件。原型物件也有一個constructor屬性,該屬性指回該函式。
2,題目分析
網上找了一個題目,先分析一下
var F = function () {} Object.prototype.a = function () {} Function.prototype.b = function () {} var f = new F()
// 請問f有方法a 方法b嗎
f的__proto__指向F.prototype,F.prototype.__proto__指向Object.prototype,所以f 可以取到a方法, 由於f的原型鏈上沒經過Function.prototype,所以取不到b方法。
由於建構函式F是由Function new出來的,所以F.__proto__指向Function.prototype,所以F可以取到b方法。