2016-06-10 60 views
0
var a = function() { }; //Just a function 

當我在控制檯中運行a.__proto__,它返回這個call()和apply()Javascript?

function() {} 

因此,如果在JavaScript中創建的每個函數的原型是像上面的功能,又在哪裏像()調用準確的方法,適用()和bind()定義?

+7

On'Function'原型 – Tushar

+0

a.constructor.prototype.apply –

+1

可能在該函數對象上。 – melpomene

回答

3

這些函數確實存在於a.__proto__(或更多鏈中) - 您所看到的問題更多的是它在控制檯中的表現方式。例如,如果您只在控制檯中執行a,您還會看到空的函數字符串,但沒有您已知的__proto__屬性。

正如@squint指出in the comments,如果使用console.dir其它性能將被顯示:

enter image description here

0

如果在JavaScript創建的每個功能的原型是像上述的功能,然後在那裏像call(),apply()和bind()定義的方法確切嗎?

正是在那個函數/ pobject上。 Function.prototype是一個功能,但它不像其他任何。它的定義§8.2.2 CreateIntrinsics

8.讓noSteps是算法步驟一個空序列。
9.讓funcProtoCreateBuiltinFunctionrealmRecnoStepsobjProto)。
10.設置內部函數。[[%FunctionPrototype%]]至funcProto

它是一個內置的功能,但其自身的原型設置爲默認的對象原型(objProto)這裏,不是本身(你不能有圓形的原型鏈)。

在算法第13步,然後去,並說所有的內在價值需要根據某些人,某些部分在規範遞歸初始化:

與值內在的設置字段Table 7列出還沒有被處理過。字段名稱是表格第一列中列出的名稱。每個字段的值都是一個新的對象值,並且按照第18-26節中每個對象的規範定義的屬性值遞歸填充。 [...]

表包含:

%FunctionPrototype% | Function.prototype |原型數據%Function%

§19.2.3property的初始值描述了對象的所有屬性,包括你提到的那些。