JavaScript 新函数表达式和新函数构造函数
JavaScript new Function expression and new Function constructor
我的问题是关于使用 new function(){ ... }
而不是 new Function();
的结果对象
我的理解是这样far/assumption
- 当我们使用 Function() 或 new Function() 创建一个函数时,我们得到一个配置为函数的对象(它的内部槽表示函数类型对象)
- 无论有没有 new 运算符,Function() 构造函数 return 都是一个新的函数对象
- 使用函数表达式 returns 一个在内部使用 Function() 构造函数的函数对象
- 函数表达式通过解析函数体提供优化
我的问题
根据我上面的假设,为什么 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()
不同的原因完全是因为 Function
与 foo
的功能不同。
我希望您不会对 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 ( ... ))
我的问题是关于使用 new function(){ ... }
而不是 new Function();
我的理解是这样far/assumption
- 当我们使用 Function() 或 new Function() 创建一个函数时,我们得到一个配置为函数的对象(它的内部槽表示函数类型对象)
- 无论有没有 new 运算符,Function() 构造函数 return 都是一个新的函数对象
- 使用函数表达式 returns 一个在内部使用 Function() 构造函数的函数对象
- 函数表达式通过解析函数体提供优化
我的问题
根据我上面的假设,为什么 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();
andnew function(){ ... }
return different things?
我要稍微改写这个例子。而不是:
new Function()
//and
new function(){ ... }
我要用
new Function()
//and
var foo = function () { ... };
new foo();
new Function()
returns 与 new foo()
不同的原因完全是因为 Function
与 foo
的功能不同。
我希望您不会对 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 asnew Function();
?
后面的表达式本质上是:
new (new Function ( ... ))