首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript -在对象中存储函数-不好的做法?

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

Stack Overflow用户
提问于 2012-01-18 06:37:20
回答 3查看 67.9K关注 0票数 74

将函数存储在一个对象中而不是只定义它们(因此是全局的),这被认为是糟糕的编码实践吗?

考虑一下:

1.

代码语言:javascript
复制
Foo = {
    bar: function() {
        alert("baz");
    }   
}

Foo.bar();

2.

代码语言:javascript
复制
function bar() {
    alert("baz");
}

bar();

当然,第二个例子的代码可能会稍微少一些,但当你开始获得很多函数时-它会变得混乱。例如,我发现使用Game.update()而不是使用updateGame();或类似的方法更简洁。当它变得更深入时,比如Game.notify.admin(id)等,它会给你更漂亮的代码。

将函数存储在对象中有什么缺点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-18 06:38:53

第一种方法是首选的。通过这种方式,您可以显式地定义函数的范围,而不是污染全局范围。使用第一种方法没有任何缺点。唯一优点:-)

结论:始终使用第一种方法来定义函数。第二个就像90年代的javascript,让我们把它放回过去,使用适当的作用域。

票数 77
EN

Stack Overflow用户

发布于 2012-01-18 07:07:19

在这种情况下,请使用第一种方法。但是,如果Foo对象变得非常复杂,那么您可能希望使用另一种方法,这将使您有机会使用构造函数。而且,当涉及到函数的作用域时,第一种方法有时并不是最好的:

代码语言:javascript
复制
function Foo(appName){
    this.name = appName;      
}

Foo.prototype.Bar = function(){
   alert(this.name)
}

var a = new Foo("baz");
a.Bar();
票数 4
EN

Stack Overflow用户

发布于 2012-01-18 08:26:59

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

代码语言: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;

请注意,上述变量实际上与类似的全局变量具有相同的重复概率:

代码语言:javascript
复制
// Global variable example:
myLib_dom_someDOMFunction0;
myLib_dom_someDOMFunction1;

myLib_util_someUtilityFunction0;
myLib_util_someUtilityFunction1;

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8902687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档