0

我喜欢创建漂亮的 OO javascript,有时使用原型,有时更原生。在许多情况下,我创建的 javascript 类看起来像这样

var myObject = myObject || {};

myObject.Example1 = function () {
    "use strict";

    // ctor
    function self() { }

    // init
    self.init = function () {
        console.log("Example 1 did init");
    };

    return self;
};

myObject.Example2 = (function ($) {
    "use strict";

    // ctor
    function self() { }

    // init
    self.init = function () {
        console.log("Example 2 did init");
    };

    return self;
})($);

但是我似乎忘记了为什么不能创建用() 和$ 括起来的函数的实例。

var obj1 = new myObject.Example1();
obj1.init(); // Does init

var obj2 = new myObject.Example2();
obj2.init(); // Does not init (obj2.init is not a function)

myObject.Example1() 按预期工作,但为什么我不能调用 myObject.Example2()?

4

2 回答 2

2

使用“从闭包中创建对象”模式的正确方法是这样的:

myObject.Example2 = (function ($) {
   return function () {
    "use strict";

    // ctor
    function self() { }

    // init
    self.init = function () {
        console.log("Example 2 did init");
    };

    return self;
   }
})($);
于 2013-05-05T20:58:38.603 回答
1

Example2是一个函数的返回值,它定义了一个名为 的函数self,为其添加一个属性,然后返回该函数。

Example1有一个几乎相同的函数,但由于你没有()end,它没有被调用,所以 valueExample1那个函数而不是里面定义的函数。

这与 and 之间的区别无关,而function () {function ($) {and之间};的区别无关})($)

$参数完全无关紧要,因为您不在$函数内部使用。

于 2013-05-05T20:51:48.560 回答