gpt4 book ai didi

javascript - 这两种定义类/对象的方式有什么区别?

转载 作者:行者123 更新时间:2023-11-30 08:52:52 26 4
gpt4 key购买 nike

 var Foobar = function() {};

Foobar.prototype.clickDetails = function() {
$("#foobar").html("test");
}

and

var Foobar = function () {
return {
clickDetails: function () {
$("#foobar").html("test");
}
};
}();

我想知道,因为后者是现有的,但我无法让它与 Jasmine 一起工作,所以我从头开始编写了第一个。两者有什么区别?

最佳答案

因为您在第二个示例的末尾有 ()(谢谢您,Bergi!),您将立即执行第二个函数并存储结果Foobar 中。因此,您的第一个示例创建了一个函数,该函数可用于通过 new 创建对象(可以重用 clickDetails 的单个副本),第二个示例创建一个非函数对象。

如果您没有在第二个示例的末尾有 (),例如:

var Foobar = function () {
return {
clickDetails: function () {
$("#foobar").html("test");
}
};
}; // <== No () here

...那么会有两个区别:

  1. 在您的第一个示例中,只有一个 clickDetails 函数,它由通过new Foobar() 创建的所有对象共享(通过原型(prototype)链)。在您的第二个示例中,每次调用 Foobar() 都会创建一个新的 clickDetails 函数。

  2. 在您的第一个示例中,您通过 var obj = new Foobar(); 创建了对象(您使用了 new 关键字)。在你的第二个中,只是var obj = Foobar();(虽然你可以使用new关键字,但它没有任何用处,并且是误导)。

关于javascript - 这两种定义类/对象的方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257409/

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