在 JavaScript 中,为什么 typeof Function.prototype 是“函数”,而不是像其他原型对象那样的“对象”?

IT技术 javascript prototype
2021-01-31 17:25:46
console.log(typeof String.prototype); // object
console.log(typeof Number.prototype); // object
console.log(typeof Object.prototype); // object
console.log(typeof Boolean.prototype); // object

console.log(typeof Function.prototype); // function

为什么typeof Function.prototype像其他原型对象一样返回“函数”,而不是“对象”?

谢谢!

4个回答

这似乎是在ECMAScript 5 中定义的

15.3.4 函数原型对象的属性

Function 原型对象本身就是一个 Function 对象(它[[Class]]“Function”),它在调用时接受任何参数并返回undefined

谢谢您的回答!=)
2021-03-26 17:25:46
@BarbuBarbu:看这里:ecma-international.org/ecma-262/6.0/...
2021-03-26 17:25:46
好的,但为什么?这背后的原因是什么?不能只是一个对象吗?
2021-03-30 17:25:46
@anand 所以根据我的结论,原因是这样的:"The Function prototype object is specified to be a function object to ensure compatibility with ECMAScript code that was created prior to the ECMAScript 2015 specification."
2021-04-02 17:25:46
@BarbuBarbu 为什么会这样?为什么在 ECMAScript 2015 规范之前创建的 ECMAScript 代码Function.prototype具有空函数?
2021-04-11 17:25:46

它在 ECMAScript2015 中提到

http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-prototype-object

函数原型对象被指定为函数对象,以确保与 ECMAScript 2015 规范之前创建的 ECMAScript 代码兼容。

这个函数对象实际上并没有做任何函数对象应该做的事情。您可以使用任何参数调用它并返回未定义。这是一个愚蠢的wrt。函数对象。它是一个普通的原型对象。

而且由于它只是出于兼容性原因而存在,因此它甚至没有原型属性。

有关详细说明,您可以参考此答案: 在此处输入链接描述

因为函数是一个本机对象,它在其他属性中具有内部 [[Construct]] 和 [[Call]] 属性以及显式原型属性——对未来对象原型的引用。它的类是函数。

F.[[Class]] = "Function"
F.[[Call]] = <reference to function> // function itself

因此 [[Call]] 除了 [[Class]] 属性(相当于“Function”)是区分对象的主要属性。因此,具有内部 [[Call]] 属性的对象被称为函数。此类对象的 typeof 运算符返回“函数”值。

见参考

由于它具有任何函数都应该具有的所有方法和props,这使得它实际上是一个函数......

想一想,让它沉下去,然后你就会得到这张照片:)

Function.prototype没有all the methods and props that any function is ought to havestackoverflow.com/a/32929169/7206799引用 @traktor53 “认为 Function.prototype 不是通常意义上的 Function 对象的另一个原因(除了在文档中这样说)是它不能被称为构造函数并在尝试这样做时抛出错误。由于函数的原型属性是在函数作为构造函数调用时使用的,因此 Function.prototype 不具有此属性是有意义的“
2021-03-23 17:25:46
尽管您确实有一点,因为您提到的逻辑在 ES5 时代使用过,请在此处查看非常好的解释:stackoverflow.com/a/32929083/7206799
2021-04-03 17:25:46