1
 var Foobar = function() {};

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

 and

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

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

4

1 回答 1

5

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

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

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

...那么会有两个不同之处:

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

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

于 2013-04-27T22:17:41.097 回答