将函数存储在一个对象中而不是只定义它们(因此是全局的),这被认为是糟糕的编码实践吗?
考虑一下:
1.
Foo = {
bar: function() {
alert("baz");
}
}
Foo.bar();
与
2.
function bar() {
alert("baz");
}
bar();
当然,第二个例子的代码可能会稍微少一些,但当你开始获得很多函数时-它会变得混乱。例如,我发现使用Game.update()
而不是使用updateGame();或类似的方法更简洁。当它变得更深入时,比如Game.notify.admin(id)
等,它会给你更漂亮的代码。
将函数存储在对象中有什么缺点吗?
发布于 2012-01-18 06:38:53
第一种方法是首选的。通过这种方式,您可以显式地定义函数的范围,而不是污染全局范围。使用第一种方法没有任何缺点。唯一优点:-)
结论:始终使用第一种方法来定义函数。第二个就像90年代的javascript,让我们把它放回过去,使用适当的作用域。
发布于 2012-01-18 07:07:19
在这种情况下,请使用第一种方法。但是,如果Foo对象变得非常复杂,那么您可能希望使用另一种方法,这将使您有机会使用构造函数。而且,当涉及到函数的作用域时,第一种方法有时并不是最好的:
function Foo(appName){
this.name = appName;
}
Foo.prototype.Bar = function(){
alert(this.name)
}
var a = new Foo("baz");
a.Bar();
发布于 2012-01-18 08:26:59
命名空间对象没有什么神奇之处,如果您使用了大量全局变量,也不一定会有任何问题。使用“名称空间”对象的主要原因是减少重复全局变量名称的可能性。第二个原因是为了方便起见,将相似的功能组合在一起,例如:
// Object example (suggested best practice):
// DOM functions are under myLib.dom
myLib.dom.someDOMFunction0;
myLib.dom.someDOMFunction1;
// Utility functions are under myLib.util
myLib.util.someUtilityFunction0;
myLib.util.someUtilityFunction1;
请注意,上述变量实际上与类似的全局变量具有相同的重复概率:
// Global variable example:
myLib_dom_someDOMFunction0;
myLib_dom_someDOMFunction1;
myLib_util_someUtilityFunction0;
myLib_util_someUtilityFunction1;
当然,前者通常是首选的,因为它被认为更容易使用。我并不主张采用第二种方法(我使用第一种方法),只是指出,虽然创建大量全局变量存在问题,但所谓的“全局名称空间污染”被高估为一种危险。
https://stackoverflow.com/questions/8902687
复制相似问题