JavaScript 新函数表达式和新函数构造函数

JavaScript new Function expression and new Function constructor

我的问题是关于使用 new function(){ ... } 而不是 new Function();

的结果对象

我的理解是这样far/assumption

我的问题

根据我上面的假设,为什么 new Function();new function(){ ... } return 不同?

第一个 return 是函数对象,而后者 return 是标准对象。鉴于引擎盖下的函数表达式使用 Function() 构造函数,为什么后者的行为与 new Function(); 不同?

使用 new function(){ ...} 我希望是函数对象,而不是标准对象。

new Function(...) returns 一个新的 function,而 new function() {...} returns 一个新的 对象.

基本上,函数只是一种计算一段代码的方法。

对象是一种在 javascript 中存储数据的方式。

旁注:技术上你可以做到

new (new Function(...))

其中 returns 一个新对象。

以下几行基本相同:

function foo(...) {...}
var foo = function (...) {...};
var foo = new Function (...);

它们都声明了一个新的函数(是一个对象,是Function的一个实例,它继承了Object原型,...)在当前范围内可以被访问通过 foo 变量。

new 关键字从一个函数实例化一个对象,该函数允许您使用标准 OOP 语言创建类似于 class 实例的对象。

继续上面的例子:

var bar = new foo(...)

将在当前范围内实例化 foo 函数的实例,可以通过 bar 变量访问。

why does new Function(); and new function(){ ... } return different things?


我要稍微改写这个例子。而不是:

new Function()
//and
new function(){ ... }

我要用

new Function()
//and
var foo = function () { ... };
new foo();

new Function() returns 与 new foo() 不同的原因完全是因为 Functionfoo 的功能不同。

我希望您不会对 new Object() returns 与 new Array() 具有不同特征的不同对象这一事实感到困惑。这里发生了完全相同的事情。

Given that a function expression under the hood uses the Function() constructor, why does the latter not behave the same as new Function();?

后面的表达式本质上是:

new (new Function ( ... ))