Zar*_*Zar 71 javascript function object
将函数存储在对象中而不仅仅是定义它们(因此是全局的),它被认为是错误的编码实践吗?
考虑:
1.
Foo = {
bar: function() {
alert("baz");
}
}
Run Code Online (Sandbox Code Playgroud)
Foo.bar();
与
2.
function bar() {
alert("baz");
}
Run Code Online (Sandbox Code Playgroud)
bar();
当然,第二个例子的代码可能略少,但是当你开始获得很多功能时 - 它会变得混乱.我发现它的方式,方式,更清洁,例如,使用Game.update()而不是使用updateGame(); 或类似的.当变得更深,像Game.notify.admin(id)等等时,它会为你提供更漂亮的代码.
将函数存储在对象中是否有任何缺点?
Dar*_*rov 72
第一种方法是首选.这样,您可以明确定义函数的范围,而不是污染全局范围.使用第一种方法没有缺点.只有好处:-)
结论:始终使用第一种方法来定义函数.第二个就像是90年代的javascript,让我们过去安息吧,并使用适当的范围.
命名空间对象没有什么魔力,如果使用大量全局变量,也不一定会遇到任何问题。\n使用“命名空间”对象的主要原因是减少重复全局变量名称的可能性。第二个原因是为了方便起见将类似的功能组合在一起,例如:
\n\n// Object example (suggested best practice):\n// DOM functions are under myLib.dom\nmyLib.dom.someDOMFunction0;\nmyLib.dom.someDOMFunction1;\n\n// Utility functions are under myLib.util\nmyLib.util.someUtilityFunction0;\nmyLib.util.someUtilityFunction1;\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,上面的内容实际上与类似的全局变量有相同的重复机会:
\n\n// Global variable example:\nmyLib_dom_someDOMFunction0;\nmyLib_dom_someDOMFunction1;\n\nmyLib_util_someUtilityFunction0;\nmyLib_util_someUtilityFunction1;\nRun Code Online (Sandbox Code Playgroud)\n\n当然,通常首选前者,因为它更容易使用。我并不是提倡你采用第二种方法(我使用第一种),只是指出虽然创建大量全局变量存在问题,所以\xe2\x80\x93所谓的“全局命名空间污染”被大大高估了作为一个危险。
\n