为什么引擎报告函数Empty()
是JavaScript中原生Function
函数的原型,但该函数本身是未定义的(从用户的角度来看)?
Function.prototype; // function Empty()
Function.__proto__; // function Empty()
Function.constructor; // function Function()
Empty(); // Uncaught ReferenceError: Empty is not defined
Object.prototype; // Object {}
Object.__proto__; // function Empty()
Object.constructor; // function Function()
Number.prototype; // Number {[[PrimitiveValue]]: 0}
Number.__proto__; // function Empty()
Number.constructor; // function Function()
String.prototype; // String {length: 0, [[PrimitiveValue]]: ""}
String.__proto__; // function Empty()
String.constructor; // function Function()
Boolean.prototype; // {[[PrimitiveValue]]: false}
Boolean.__proto__; // function Empty()
Boolean.constructor; // function Function()
为什么不将所有这些引用指向Empty()
到null
或一些空对象?
答案 0 :(得分:2)
为什么引擎报告函数Empty()是原生函数的原型
因为Function.prototype
object基本上是一个空函数。
该功能本身是未定义的(从用户的角度来看)?
我不明白你的意思,Function.prototype
很明确。如果您指的是标识符Empty
,那么它就没有理由仅仅因为它被name of a function用于全局变量。
为什么不将所有对Empty()的引用指向null?
因为这会破坏继承。
还是一些空对象?
是一个空对象 - 一个空函数对象。为什么不是普通物体?因为规范是这样说的。