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

arc*_*ect 1 javascript

 var Foobar = function() {};

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

 and

 var Foobar = function () {
      return {
           clickDetails: function () {
                $("#foobar").html("test");
           }
      };
}();
Run Code Online (Sandbox Code Playgroud)

我想知道因为后者是现有的但是我无法让它与Jasmine合作并且我从头开始编写第一个.这两者有什么区别?

T.J*_*der 5

因为你有()你的第二个例子结束(谢谢你,BERGI!),您执行的是第二个函数立即和存储结果Foobar.因此,您的第一个示例创建了一个可用于创建对象的函数new(可以重用单个副本clickDetails),第二个示例创建一个非函数对象.

如果你没有拥有()你的第二个例子,比如结束:

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

......然后会有两个不同之处:

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

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

  • 起初我也想过,但实际上第二个是(伪装的)IEFE. (2认同)