我有这个功能:
function fff(){}
function
是Function constructor
所以fff.__proto__
应该告诉我:function Function() { [native code] }
但事实并非如此。
它显示:function Empty() {}
我只看到constructor
的{{1}}属性__proto__
问题:
这个function Function() { [native code] }
功能是什么?
为什么function Empty() {}
不会告诉我:fff.__proto__
?
nb的
我知道function Function() { [native code] }
是查找链中用于解析方法等的实际对象。__proto__
是用于构建 prototype
的对象使用__proto__
创建对象时。
但是又一次:函数new
是一个函数,它通过引用fff
在幕后实例化...所以?
答案 0 :(得分:5)
你误解了__proto__
。
__proto__
返回对象继承的原型值;不是它的构造函数。
所有功能(包括Function
本身)都会继承Function.prototype
因此,Function.__proto__ === Function.prototype
是正确的
此规范在规范的15.3.4部分中指定:
Function原型对象本身就是一个Function对象(它的
[[Class]]
是"Function"
),在调用时,接受任何参数并返回undefined。
另见
15.3.4.2 Function.prototype.toString()
返回函数的依赖于实现的表示。此表示具有 FunctionDeclaration 的语法。请特别注意,表示字符串中的空格,行终止符和分号的使用和放置取决于实现。
toString
函数不是通用的;如果此值不是Function对象,则抛出TypeError异常。因此,它不能转移到其他类型的对象用作方法。