在js中,我们有一个名为“ Function ”的函数。 它的一个实例返回一个函数:
var myfunc = new Function('arg1','arg2','return arg1+arg2');
在该示例中,变量 myfunc 包含一个函数,该函数返回两个给定参数的总和。
我的问题是 - Function 是一个函数怎么可能?它不能是自己的一个实例。 Object 也是一个函数,是 Function 的一个实例。但 Function 是 Object 的一个实例,因为函数是对象。
我无法理解它是如何可能的,它是一个无限循环......
感谢。
答案 0 :(得分: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()
的原因很少(模板引擎虽然是一个很好的用例)。
答案 1 :(得分:1)
琐碎的答案是“因为ECMA-262这么说”。
Function,Object,Array,Date等对象是内置对象,因此它们不是以通常的方式构造的,它们就是这样。他们之间的关系,他们的原型和他们的[[Prototype]]
是由环境根据ECMA-262建立的。所以函数inherits from its own prototype(即Function.prototype === Function[[Prototype]]
),继承自Object.prototype。