其實(shí)下面的東西只要懂原型鏈就很容易想通涯曲。
>Function.__proto__ === Object.__proto__ // 1
true
>Function.prototype === Function.__proto__ // 2
true
>Function.prototype === Object.__proto__ // 3
true
>Object.prototype === Object.__proto__ // 4
false
>Object.prototype === Function.prototype.__proto__ // 5
true
>Object.prototype === Object.__proto__.__proto__ // 6
true
Function和Object本質(zhì)上都是函數(shù)源武,也就是說(shuō):
- (1) 它們作為構(gòu)造器是Function的直接子類(lèi)斯入,
- (2) 它們作為對(duì)象是又都是Object的子孫類(lèi)晰搀。
而原型鏈中有:
- (3) 構(gòu)造器的
prototype
(即原型)中定義可以被對(duì)象繼承的屬性脐帝,實(shí)例對(duì)象的__proto__
指向其構(gòu)造器的原型同云。
所以,
- 基于(1)(3)堵腹,
Function.__proto__
和Object.__proto__
都指向Function.prototype
炸站,可得代碼中1、2疚顷、3的結(jié)果 - 基于(1)旱易,Object直接繼承自Function并不是Object,所以可得4的結(jié)果
- 基于(2)(3)腿堤,可得
Object.prototype === Object.__proto__.[__proto__.]...__proto__
阀坏。事實(shí)上Function的原型是Object的實(shí)例。所以可得代碼中5笆檀、6的結(jié)果.