gpt4 book ai didi

JavaScript 新函数困惑

转载 作者:行者123 更新时间:2023-11-28 20:07:16 25 4
gpt4 key购买 nike

在阅读《学习 JavaScript》第二版时,我在第 13 章:创建自定义 JavaScript 对象中看到了一段代码。

var oneOff = new Function () {
this.variablea = "variablea";
this.method = function () {
return xxx;
}
}

据说它等同于:

var oneOff = new Object();
oneOff.variablea = "variablea";
oneOff.method = function () {...};

但我不知道 new Function () {..} 是什么。任何帮助表示赞赏。谢谢。

最佳答案

当使用 new function() {/* */} 时,您并不是在创建一个新函数,而是一个对象。
这只是 new 与构造函数的标准用法,如下所示:

var oneInstance = new ConstructorFunction();

function ConstructorFunction() {
this.var1 = 'val1';
this.method1 = function() { } ;
}

不同之处在于构造函数是在实例化时定义的,并且我们省略了调用该函数,这是合法的(尽管我认为很困惑)。

我发现它在某种程度上更清晰一些括号,并明确调用构造函数:

var oneOff = new  ( function () {
this.variablea = "variablea";
this.method = function () {
return xxx;
};
} ) () ;

但是对于只创建一个对象,我们宁愿使用简单的对象表示法:

var oneOff = {
variablea : 'valuea',
method : function () { return xxx; }
}

它们的性能比较如何?

对于 new function() {} 方法,创建对象需要首先创建一个函数,然后在"new"上下文中执行该函数。另一方面,对象垃圾只创建......一个对象,所以它的时间更少,创建的垃圾也更少。

关于两种类型对象的使用性能(读/写属性/使用方法的时间),很难说,因为所有 JavaScript 解释器都非常复杂且非常不同。在进行基准测试之前,您无法真正了解他们何时以及如何决定优化部分代码。 - 由于这些“随机”优化,基准测试也不是一件容易的事。我敢打赌,它们的使用性能应该非常接近,如果您花时间采取一些措施,请告诉我们。

关于JavaScript 新函数困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20585123/

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