0

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

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

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

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

而且我无法理解这怎么可能,这是一个无限循环......

谢谢。

4

2 回答 2

2

Object, Function, 等确实是函数 - 确切地说是构造函数。

请记住,您创建的对象是这样的:

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()(模板引擎是一个很好的用例)。

于 2012-07-02T22:35:01.193 回答
1

简单的答案是“因为 ECMA-262 这么说”。

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

于 2012-07-02T22:56:13.270 回答