var Foobar = function() {};
Foobar.prototype.clickDetails = function() {
$("#foobar").html("test");
}
and
var Foobar = function () {
return {
clickDetails: function () {
$("#foobar").html("test");
}
};
}();
我很想知道因为后者是现有的但是我无法让它与Jasmine合作而我从头开始编写第一个。这两者有什么区别?
答案 0 :(得分:5)
因为你的第二个例子末尾有()
(谢谢你,Bergi!),你正在立即执行第二个函数并将结果存储在{{1 }}。因此,您的第一个示例创建了一个函数,可用于通过Foobar
创建对象(可以重用new
的单个副本),第二个创建一个非函数对象。
如果 在第二个示例的末尾没有<{1}},例如:
clickDetails
...然后会有两个不同之处:
在您的第一个示例中,只有一个 ()
函数由通过var Foobar = function () {
return {
clickDetails: function () {
$("#foobar").html("test");
}
};
}; // <== No () here
(通过原型链)创建的所有对象共享。在第二个示例中,每次调用clickDetails
时都会创建一个新的new Foobar()
函数。
在第一个示例中,您可以通过clickDetails
创建对象(使用Foobar()
关键字)。在你的第二个,只是var obj = new Foobar();
(虽然你可以使用new
关键字,但它没有任何有用的效果,并且具有误导性。)