将JavaScript函数放入对象并在需要时调用它们是否有任何优点或缺点?

时间:2011-02-23 00:03:23

标签: javascript jquery function variables

例如,我有很多这样的函数:

function a() {
    //do something
}

function b() {
    //do something
}
//  call function a
a();
//  call function b
b();

如果我以这种方式初始化函数会有什么优点或缺点?

var jslib = {
    a: {
        init: function() {
            //do something
        }
    },
    b: {
        init: function() {
            //do something
        }
    }
}
//  init function a
jslib.a.init();
//  init function b
jslib.b.init();

3 个答案:

答案 0 :(得分:5)

优点

  1. 您不会污染“全局命名空间”。例如,在Javascript中的任何其他地方声明的全局变量a将不会隐藏您的功能。
  2. 您将相关功能组合在一起。
  3. 缺点

    1. 调用函数的代码稍长。 (如果你认为这是不利的)
    2. 尽管init名称表明这些对象具有状态,因此它们不仅具有功能。在这种情况下,两个版本甚至不等同。

答案 1 :(得分:3)

定义对象文字的主要优点是不会污染全局命名空间和更清晰的代码组织。

Rebecca Murphey在这篇博文中解释了这些优势:

http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/

我更喜欢在功能上而不是字面上创建对象,因为JS函数是第一类对象。因此,您可以定义可以在对象外部调用的公共方法和属性,但也可以使用隐藏在对象范围之外的私有变量和函数。

function Alphabet() {

  // public property
  this.letters = 'xyx';

  // private variable
  var letters = 'abc';

  // public method
  this.speak = function(){
    say("Now I know my ABCs");
  }

  // private function
  function say(message){
    alert(message); 
  }

}

答案 2 :(得分:1)

唯一真正的优势是你没有用一堆额外的函数来污染全局命名空间。