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

"Function" is function, how is that possible?

本文关键字:功能 怎么可能      更新时间:2023-09-26

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

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

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

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

而且我不明白这怎么可能,这是一个无限循环......

谢谢。

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

微不足道的答案是"因为 ECMA-262 是这么说的"。

像函数、对象、数组、日期等对象是内置对象,所以它们不是以通常的方式构造的,它们只是。它们、原型和[[Prototype]]之间的关系由环境根据 ECMA-262 建立。所以函数继承自它自己的原型(即 Function.prototype === Function[[Prototype]] ),它继承自 Object.prototype。