我刚刚开始在一家新公司工作,并注意到他们的许多 JS 对我来说看起来完全错误。我有点犹豫是否要在没有确认这是错误的情况下提出它,因为我还很初级,我不是 JS 专家,这只是我的第二天,我不想看起来很愚蠢。
所以,通常我希望模块模式看起来像:
MODULENAME = MODULENAME || {};
MODULENAME.SUBMODULENAME = (function() {
var bla = {};
bla.somefunction = function() {
//do stuff
};
//add more stuff to bla
return bla;
}());
他们在代码中的全部内容是:
MODULENAME = MODULENAME || {};
MODULENAME.SUBMODULENAME = (function() {
var that = this;
that.somefunction = function() {
//do stuff
};
//add more stuff to that
return that;
}());
现在当然是因为该函数没有被作为带有new
关键字或方法的构造函数调用,this
所以绑定到window
并且它们定义that
为this
. 所以他们基本上把所有东西都转储到了全局对象中,他们所有的子模块名称实际上都是window
. 有人愿意这样做吗?或者这真的像我认为的那样错误吗?
编辑:
我在var
子模块定义之前犯了一个错误,最初我写了一些稍微不同的东西,忘记删除var
. 我也试图让这个例子更清楚一些,希望我现在的意思更明显。
编辑2:
此外,我查看了在 Firebug 中执行的脚本,它们肯定将所有内容添加到window
,该对象完全是一团糟。