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

时间:2013-04-27 22:14:57

标签: javascript

 var Foobar = function() {};

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

 and

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

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

1 个答案:

答案 0 :(得分:5)

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

如果 在第二个示例的末尾没有<{1}},例如:

clickDetails

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

  1. 在您的第一个示例中,只有一个 ()函数由通过var Foobar = function () { return { clickDetails: function () { $("#foobar").html("test"); } }; }; // <== No () here (通过原型链)创建的所有对象共享。在第二个示例中,每次调用clickDetails时都会创建一个新的new Foobar()函数。

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