1. 程式人生 > >js原型,原型鏈

js原型,原型鏈

  之前面試的時候遇到過原型和原型鏈方面的題目,具體的已經忘了,只記得當時回答的稀裡糊塗,今天查了一些資料,把自己所理解的寫出來,加深記憶。

 

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方法。