gpt4 book ai didi

JavaScript new Function 表达式和 new Function 构造函数

转载 作者:行者123 更新时间:2023-11-30 11:56:00 25 4
gpt4 key购买 nike

我的问题是关于使用 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原型(prototype),...)可以通过 foo 变量访问。

new 关键字从一个函数实例化一个对象,它允许您创建类似于标准 OOP 语言中的类实例的东西。

继续上面的例子:

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() 返回的内容与 new foo() 不同的原因完全是因为 Functionfoo

我希望您不会对 new Object() 返回的对象具有与 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 ( ... ))

关于JavaScript new Function 表达式和 new Function 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com