“功能”是功能,这怎么可能?

时间:2012-07-02 22:33:32

标签: javascript object

在js中,我们有一个名为“ Function ”的函数。 它的一个实例返回一个函数:

var myfunc = new Function('arg1','arg2','return arg1+arg2');

在该示例中,变量 myfunc 包含一个函数,该函数返回两个给定参数的总和。

我的问题是 - Function 是一个函数怎么可能?它不能是自己的一个实例。 Object 也是一个函数,是 Function 的一个实例。但 Function Object 的一个实例,因为函数是对象。

我无法理解它是如何可能的,它是一个无限循环......

感谢。

2 个答案:

答案 0 :(得分:2)

ObjectFunction等确实是函数 - 准确的构造函数。

请记住,您创建了一个这样的对象:

function MyObject() {
    this.foo = 'bar';
}

var my = new MyObject();
alert(my.foo);

顺便说一句,使用new Function(...)通常是一个坏主意。你的例子会更加清晰:

function myfunc(arg1, arg2) { return arg1 + arg2 }

var myfunc = function(arg1, arg2) { return arg1 + arg2 };

因此,在生产中使用new Function()的原因很少(模板引擎虽然是一个很好的用例)。

答案 1 :(得分:1)

琐碎的答案是“因为ECMA-262这么说”。

Function,Object,Array,Date等对象是内置对象,因此它们不是以通常的方式构造的,它们就是这样。他们之间的关系,他们的原型和他们的[[Prototype]]是由环境根据ECMA-262建立的。所以函数inherits from its own prototype(即Function.prototype === Function[[Prototype]]),继承自Object.prototype。