繁体   English   中英

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

[英]JavaScript new Function expression and new Function constructor

我的问题是关于结果对象使用new function(){ ... }不是new Function();

到目前为止我的理解/假设

  • 当我们使用Function()或new Function()创建一个函数时,我们得到一个配置为函数的对象(它的内部插槽表示一个函数类型对象)
  • 无论有没有new运算符,Function()构造函数都会返回一个新的函数对象
  • 使用函数表达式返回一个函数对象,该函数对象在内部使用Function()构造函数
  • 函数表达式提供了解析函数体的优化

我的问题

按照我上面的假设,为什么new Function(); new function(){ ... }返回不同的东西?

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

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

以下几行基本相同:

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

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

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

继续上面的例子:

var bar = new foo(...)

将在当前作用域中实例化foo函数的实例,该实例可以通过bar变量访问。

为什么new Function(); new function(){ ... }返回不同的东西?


我稍微会重复一下这个例子。 代替:

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

我打算用

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

new Function()返回与new foo()不同的东西的原因完全是因为Function是与foo不同的函数。

我希望您不会因为new Object()返回具有与new Array()不同的功能的不同对象这一事实而感到困惑。 完全相同的事情发生在这里。

鉴于引擎盖下的函数表达式使用Function()构造函数,为什么后者的行为与new Function();

后面的表达基本上是:

new (new Function ( ... ))

new Function(...)返回一个新函数 ,而new function(){...}返回一个新Object

基本上,Function只是评估一段代码的一种方式。

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

旁注:你可以在技术上做到

new (new Function(...))

返回一个新对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM