>Function與Object原型的關系是很多面試題中必考的內容,其本質還是原型鏈的繼承。
<br />
- 首先Object和Function都是構造函數,而所有的構造函數的都是Function的實例對象. 因此
- Object是Function的實例對象
- Function.prototype是Object的實例對象
- 實例對象的原型(我們以proto來表示)會指向其構造函數的prototype屬性, 因此
- Object.proto ===Function.prototype
- 解釋:因為Object是Function實例對象,所以Objct的原型就是Function的原型屬性
- Function.proto === Function.prototype
- 解釋:Function也是Function的實例方法,所以Function的原型指向Function的原型屬性
- Function.prototype.proto === Object.prototype
- 解釋:Function的原型屬性是繼承自Function的原型屬性,Object的原型屬性也是繼承自Function的原型屬性,所以Function的原型屬性的原型等于Object的原型屬性
- 當我們訪問一個屬性值的時候, 它會沿著原型鏈向上查找, 直到找到或者到Object.prototype.proto(為null)截止.
```javascript
var foo = {};
var F = function(){};
Object.prototype.a = 'value a';
Function.prototype.b = 'value b';
console.log(foo.a) // value a
console.log(foo.b) // undefined
console.log(F.a) // value a
console.log(F.b) // value b
```