Javascript 为什么typeof(Function.prototype)是函数

Javascript 为什么typeof(Function.prototype)是函数,javascript,function.prototype,Javascript,Function.prototype,我知道,原型是对象文字。因此,可以在其上定义方法和属性函数。原型有一些方法,比如apply、call、bind、toString等。所以我认为函数的原型应该是一个对象文本。但是我运行了下面的代码并遇到了函数。原型是类型的函数 console.log(typeof(Function.prototype)); // function 为什么它本身不是对象文字?来自: 函数原型对象是内在对象%FunctionPrototype%函数原型对象本身就是一个内置函数对象。调用时,它接受任何参数并返回未定义

我知道,原型是对象文字。因此,可以在其上定义方法和属性<代码>函数。原型有一些方法,比如apply、call、bind、toString等。所以我认为函数的原型应该是一个对象文本。但是我运行了下面的代码并遇到了
函数。原型
类型的函数

console.log(typeof(Function.prototype)); // function
为什么它本身不是对象文字?

来自:

函数原型对象是内在对象%FunctionPrototype%函数原型对象本身就是一个内置函数对象。调用时,它接受任何参数并返回未定义的。它没有[[Construct]]内部方法,因此它不是构造函数

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

(我的重点)

如果我们使用ES5规范:

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

…但没有解释为什么会这样。该语言在ES1、ES2、ES3和ES5中基本不变。我认为最初的想法基本上是,这就是赋予它功能性的原因,尽管
typeof
(即使在ES1中)没有考虑内部
[[Class]]]
,而是考虑是否实现了
[[Call]]]
(现在仍然如此)。当某些东西回到ES1时,通常只需调用“因为Eich在10天内完成了第一个JavaScript,是的,当您这样做时,会发生奇怪的事情”参数::-)



旁注:“object literal”我认为您的意思是“普通对象”。(一个“object literal”——规范称之为An——只是一种在源代码中编写对象的方法。还有其他方法可以创建普通对象。)

对象literal是一些用于创建对象的JavaScript语法。它不是一种数据类型


函数只是JavaScript中的一种特定类型的对象。只要你有一个对象,你就可以有一个函数。

好吧,我不认为你指的是对象文字,正如其他答案和评论所暗示的那样

alert(Function.prototype instanceof Object)//true
警报(Function.prototype instanceof Function)//true

alert(typeof Function.prototype)//Function
我认为OP在说“object literal”时只是“object”的意思。就像很多人说JSON对象一样,他们实际上并不是指它,只是缺少术语知识。object literal只是一种定义对象的简写方法
{}
新对象()相同。
的可能重复如果它是函数对象,我可以像函数一样调用它吗;如上所述,它所做的只是返回
undefined