Javascript - 在对象中存储函数 - 不好的做法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

将函数存储在对象中而不是仅仅定义它们(因此是全局性的)会被认为是不好的编码实践吗?

考虑:

1.

Foo = {
    bar: function() {
        alert("baz");
    }   
}

Foo.bar();

2.

function bar() {
    alert("baz");
}

bar();

当然,第二个例子的代码可能会稍微少一点,但是当你开始获得许多功能时 - 它会变得杂乱无章。例如,我觉得它的方式,更清洁,Game.update()而不是使用updateGame(); 或类似的。当更深入,Game.notify.admin(id)如此等等,它会给你更漂亮的代码。

将函数存储在对象中是否有任何缺点?

提问于
用户回答回答于

第一种方法是首选。这样你就明确地定义了函数的作用域而不是污染全局作用域。使用第一种方法没有缺点。只有上升:-)

结论:始终使用第一种方法来定义函数。第二个就像是90年代的javascript,让我们把它放在过去的平静中,并使用适当的范围。

用户回答回答于

命名空间对象没有魔力,如果使用大量全局变量,也不会有任何问题。使用“名称空间”对象的主要原因是为了减少重复的全局变量名称的可能性。第二个原因是为了方便将类似的功能组合在一起,例如:

// 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;

当然前者通常是首选,因为它看起来更容易处理。我并不是主张采用第二种方法(我使用第一种方法),只是指出虽然在创建大量全局变量时存在问题,但所谓的“全局名称空间污染”作为一种危险被高估。

扫码关注云+社区