5

我有这个功能:

function fff(){}

哪个是function哪个是Function constructor

所以fff.__proto__应该告诉我:function Function() { [native code] }

但事实并非如此。

表明 : function Empty() {}

在此处输入图像描述

我只看到它的constructor财产__proto__function Function() { [native code] }

问题 :

这是什么function Empty() {}功能
,为什么fff.__proto__不给我看:function Function() { [native code] }

nb 我知道这是在查找链中用于解析__proto__方法等的实际对象,是在prototype使用. __proto__new

但同样:functionfff是一个通过 newing 在幕后实例化的函数Function constructor.......所以?

4

1 回答 1

5

你误会了__proto__

__proto__返回对象继承的原型值;不是它的构造函数。

所有函数(包括Function自身)都继承Function.prototype.
因此,Function.__proto__ === Function.prototype是真的。
该对象在规范的第15.3.4节中指定:

Function 原型对象本身就是一个 Function 对象(它的[[Class]]is "Function"),当被调用时,它接受任何参数并返回 undefined。

也可以看看

15.3.4.2 函数.prototype.toString()

返回函数的依赖于实现的表示。此表示具有FunctionDeclaration的语法。请特别注意,在表示字符串中使用和放置空格、行终止符和分号是依赖于实现的。

toString功能不是通用的;如果 this 值不是 Function 对象,它会抛出 TypeError 异常。因此,它不能转移到其他种类的对象中用作方法。

于 2013-10-28T17:02:38.033 回答