什么是JavaScript中的Empty函数,为什么它未定义?

时间:2015-06-17 19:02:29

标签: javascript prototype

为什么引擎报告函数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或一些空对象?

1 个答案:

答案 0 :(得分:2)

  

为什么引擎报告函数Empty()是原生函数的原型

因为Function.prototype object基本上是一个空函数。

  

该功能本身是未定义的(从用户的角度来看)?

我不明白你的意思,Function.prototype很明确。如果您指的是标识符Empty,那么它就没有理由仅仅因为它被name of a function用于全局变量。

  

为什么不将所有对Empty()的引用指向null?

因为这会破坏继承。

  

还是一些空对象?

一个空对象 - 一个空函数对象。为什么不是普通物体?因为规范是这样说的。