这里有两个创建对象的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;
})();
据我所知,第二个例子有时更容易阅读,并避免“污染”对象的命名空间。但是,在第一个示例中为辅助函数编写测试更容易。
我缺少任何权衡吗?
答案 0 :(得分:2)
如果目标保持不变,那么第一个应该是最好的选择,至少对我而言。它直接与对象建立联系,而第二个也与对象建立联系,但间接使用call(this)
,用于设置上下文。
为什么要在上下文中
来设置或更改上下文?此外,在第一种情况下,方法是有条理的,只能由myObject.doSomething()
访问,你可以放心,没有任何其他方式调用相同,但第二个功能可以是在对象之外调用,而你的程序员可能不知道它不应该在对象之外被调用,但是通过遵循第一种方式,他们完全知道它做了什么以及它不应该做什么。
答案 1 :(得分:0)
如果你对一个永远不会在对象外面调用的对象有一个函数,你必须问自己的第一个问题是,对象上需要使用多少其他函数?如果只有其他功能正在使用它,请在调用者内部移动该功能并使其成为内部功能。如果有多个函数需要它,那么辅助函数可能正在做一些相当通用的事情,并且可能被移出对象。最合适的代码总是取决于用例。