在JavaScript中,为什么type of Function.prototype为;“函数”;,不是";“对象”;像其他原型对象一样?

在JavaScript中,为什么type of Function.prototype为;“函数”;,不是";“对象”;像其他原型对象一样?,javascript,prototype,Javascript,Prototype,为什么typeof Function.prototype像其他原型对象一样返回“函数”,而不是“对象” 谢谢大家! 这似乎定义在: 15.3.4功能原型对象的属性 函数原型对象本身就是一个函数对象(它的[[Class]]是“函数”),调用时,它接受任何参数并返回未定义的 由于它拥有任何函数都应该具备的所有方法和道具,这使得它有效地成为一个函数 想一想,让它下沉,然后你就会明白了:)因为函数是一个本机对象,在其他属性中,它有内部[[Construct]]和[[Call]]属性,还有显式原型属性——

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


谢谢大家!

这似乎定义在:

15.3.4功能原型对象的属性

函数原型对象本身就是一个函数对象(它的
[[Class]]
“函数”),调用时,它接受任何参数并返回未定义的


由于它拥有任何函数都应该具备的所有方法和道具,这使得它有效地成为一个函数


想一想,让它下沉,然后你就会明白了:)

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

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
F.[Class]]=“函数”
F.[[Call]]=//函数本身
因此,除了[[Class]]属性(相当于“函数”)之外,[[Call]]是区分对象的主要方法。因此,具有内部[[Call]]属性的对象被称为函数。此类对象的typeof运算符返回“函数”值


ECMAScript 2015中提到了它

:

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

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

而且因为它只是出于兼容性的原因而存在,所以它甚至没有原型属性

有关详细说明,您可以参考以下答案:

如果没有所有HTML,您可以问这个问题。一个好问题…@AtesGoral现在解决了@金牛座:迟到(6年)总比后悔好@确实是。谢谢你的回答!=)好吧,但是为什么呢?这背后的原因是什么?不能仅仅是一个对象吗?@BarbuBarbu:看看这里:@ana根据我的结论,原因是:
“函数原型对象被指定为函数对象,以确保与ECMAScript 2015规范之前创建的ECMAScript代码兼容。”
?@BarbuBarbu为什么?为什么在ECMAScript 2015规范之前创建的ECMAScript代码具有
函数。prototype
作为空函数?
函数。prototype
没有任何函数应该具有的
所有方法和道具“认为Function.prototype不是通常意义上的函数对象的另一个原因(除了在文档中这样说之外)是,它不能作为构造函数调用,如果试图这样做就会抛出错误。由于函数的prototype属性是在函数作为构造函数调用时使用的,因此function.prototype不具有此属性是有意义的“尽管您确实有一点,因为您提到的逻辑是在ES5时间使用的,请参见此处非常好的解释:
F.[[Class]] = "Function"
F.[[Call]] = <reference to function> // function itself