因为Function
它本身就是一个函数:
typeof Function === 'function'
Object.getPrototypeOf(Function) === Function.prototype
您可以看到它被称为函数(一种间接形式eval
):
Function('return 1+2')() === 3
规范中定义的所有内容。
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 对象很可能是最先出现的,但这不是第一个函数。我们无权访问该内置函数。