小编Mic*_*hal的帖子

模块模式中的这个关键字?

我刚刚开始在一家新公司工作,并注意到在他们的很多JS中我看起来完全没错.我有点犹豫要提起它而不确认这是错的,因为我很小,我不是JS专家,这只是我的第二天,我不想看起来很愚蠢.

所以,通常我希望模块模式看起来像:

MODULENAME = MODULENAME || {};

MODULENAME.SUBMODULENAME = (function() {
    var bla = {};

    bla.somefunction = function() {
        //do stuff
    };

    //add more stuff to bla
    return bla;
}());
Run Code Online (Sandbox Code Playgroud)

他们的代码是:

MODULENAME = MODULENAME || {};

MODULENAME.SUBMODULENAME = (function() {
    var that = this;

    that.somefunction = function() {
        //do stuff
    };

    //add more stuff to that
    return that;
}());
Run Code Online (Sandbox Code Playgroud)

现在当然因为函数没有作为带有new关键字或方法的构造函数被调用,所以它this被绑定window并且它们被定义thatthis.因此,他们基本上将所有内容转储到全局对象中,并且所有子模块名称实际上都是别名window.有没有理由有人想要这样做?或者这对我来说真的是错误的吗?

编辑:

我在放置var子模块定义之前犯了一个错误,最初我写的东西略有不同,忘记删除了var.我试图让这个例子更加清晰,希望现在我的意思更明显.

编辑2:

此外,我已经看过在Firebug中执行的脚本,他们肯定是在添加所有东西 …

javascript design-patterns global-object

5
推荐指数
1
解决办法
1631
查看次数