我对javascript中的自调用函数有疑问。

我正在做的事情类似于以下内容

myNamespace =  {}; //namespace for holding any objects/functions

//helpModule as an example

myNamespace.HelpModule = new (function(){
    this.abc = '123';
    //lots of other code in here...
})();

现在,我可以像这样访问myNamespace.HelpModule的属性:
alert(myNamespace.HelpModule.abc);

但是对于初学者来说,jsLint不喜欢说“奇怪的构造。删除'new'。”,
而且此page声明您不应使用函数构造函数,尽管在这种情况下,由于它具有自调用功能,因此我不确定是否使用函数构造函数?

无论如何,它似乎工作正常,而我正在使用它的原因是使函数具有“this”作用域,而不是全局对象(窗口)。我可以将其定义为对象文字或执行类似的操作
myNamespace.HelpModule = (function(){
    var obj = {};
    obj.abc = '123';

    return obj;
}();

但是这些对我来说似乎都不是“优雅”。

我想知道这是不好的形式/做法吗?

最佳答案

这很奇怪,因为定义构造函数的目的是能够重用它来创建许多对象。

为了您的目的,您可以使用此结构-

myNamespace.HelpModule = (function(){
    //private stuff here
    var a = 100;
    return {
        //public stuff here
        b : 200,
        something: function() {
            return a + this.b;
        }
    };
})();

09-30 16:34