为对象分配(或不分配)辅助函数有哪些权衡取舍?

时间:2014-10-04 04:38:51

标签: javascript

这里有两个创建对象的JS文件示例。假设doSomethingHelper函数永远不会在doSomething函数之外调用。

示例1(分配给对象的帮助程序):

(function() {
  var myObject = {
    doSomething: function (a) {
      // some code here
      this.doSomethingHelper();
      // maybe more code here
    },

    doSomethingHelper: function () {
      // code here
    }
  }

  return myObject;
})();

示例2(帮助程序不是对象的一部分):

(function() {
  var myObject = {
    doSomething: function (a) {
      // some code here
      doSomethingHelper.call(this);
      // maybe more code here
    }
  }

  function doSomethingHelper() {
    // code here
  }

  return myObject;
})();

据我所知,第二个例子有时更容易阅读,并避免“污染”对象的命名空间。但是,在第一个示例中为辅助函数编写测试更容易。

我缺少任何权衡吗?

2 个答案:

答案 0 :(得分:2)

如果目标保持不变,那么第一个应该是最好的选择,至少对我而言。它直接与对象建立联系,而第二个也与对象建立联系,但间接使用call(this),用于设置上下文。

为什么要在上下文中

来设置或更改上下文?

此外,在第一种情况下,方法是有条理的,只能由myObject.doSomething()访问,你可以放心,没有任何其他方式调用相同,但第二个功能可以是在对象之外调用,而你的程序员可能不知道它不应该在对象之外被调用,但是通过遵循第一种方式,他们完全知道它做了什么以及它不应该做什么。

答案 1 :(得分:0)

如果你对一个永远不会在对象外面调用的对象有一个函数,你必须问自己的第一个问题是,对象上需要使用多少其他函数?如果只有其他功能正在使用它,请在调用者内部移动该功能并使其成为内部功能。如果有多个函数需要它,那么辅助函数可能正在做一些相当通用的事情,并且可能被移出对象。最合适的代码总是取决于用例。