因爲Function
本身就是一個功能:
typeof Function === 'function'
Object.getPrototypeOf(Function) === Function.prototype
而且你可以看到它被稱爲函數(間接eval
形式):
Function('return 1+2')() === 3
所有這些定義in the spec。
zerkms問a comment above:
是先 - 函數對象或函數原型?
我們必須明白,暴露給我們的東西,弱小的程序員,與內部所代表的不同。這可以通過重寫Array
構造舉例說明(提示:在寫一個答案不要嘗試這個,你會得到很多錯誤):
new Array(0, 1, 2); //gives you [0, 1, 2]
Array = function() { return [4] };
new Array(0, 1, 2); //gives you [4]
//however,
[0, 1, 2] //will always give you [0, 1, 2]
這是因爲a section in the spec(有點下來,的「語義」部分):
令陣列是彷彿由表達式new Array()
其中Array
是標準內置具有該名稱的構造創建一個新對象的結果。
使用數組文本(如規範要求,或數組初始化)你確保您使用內置數組構造。
我爲什麼給這個例子?首先,因爲這是一個有趣的例子。其次,說明我們做什麼和實際做了什麼是不同的。爲了回答zerkms,Function對象很可能是第一個,但這不是第一個函數。我們無法訪問該內置功能。
其中最先出現的是函數對象還是函數原型? – zerkms
原型,如果對象本身無法得到de方法或屬性,如果問它它的原型,或原型的原型.... – Edorka
我只是想'函數本身,它應該是Object的對象,因此它會只查找Object的原型而不是'Function本身。 –