Function
それ自体が関数であるため:
typeof Function === 'function'
Object.getPrototypeOf(Function) === Function.prototype
eval
そして、関数 ( indirect の形式)として呼び出されていることがわかります。
Function('return 1+2')() === 3
spec で定義されているすべてのこと。
上記のコメントで zerkms が尋ねた:
Function オブジェクトと Function プロトタイプのどちらが先ですか?
貧弱なプログラマーである私たちに公開されているものは、内部で表現されているものとは異なることを理解する必要があります。これは、コンストラクターをオーバーライドすることで例示できます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]
これは、仕様のセクション(「セマンティクス」セクションの少し下) によるものです。
配列を、式new Array()
whereArray
がその名前の標準組み込みコンストラクターであるかのように、新しいオブジェクトを作成した結果とします。
配列リテラル (または仕様で呼び出される配列初期化子) を使用すると、組み込みのArray コンストラクターを確実に使用できます。
なぜこの例を挙げたのですか?まず第一に、それは楽しい例だからです。第二に、私たちが行っていることと実際に行われていることがどのように異なるかを示すことです。zerkms に答えるために、Function オブジェクトが最初に来た可能性が最も高いですが、それは最初の関数ではありませんでした。その組み込み関数にはアクセスできません。