OO Javascript中function()和function($)之间的区别?

时间:2013-05-05 20:49:04

标签: javascript

我喜欢创建漂亮的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()?

2 个答案:

答案 0 :(得分:2)

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

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

    // ctor
    function self() { }

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

    return self;
   }
})($);

答案 1 :(得分:1)

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

Example1具有几乎相同的功能,但由于 end 没有(),因此不会调用它,因此{{1}的值那个函数而不是它里面定义的函数。

这与Example1function () {之间的差异以及与function ($) {};之间的差异无关。

由于您未在函数内使用})($),因此$参数完全无关紧要。