背景
我将jQuery代码组织在单独的文件中,保存像这样的虚拟对象文字:
$(function() {
'use strict';
// Example feature module
function featureOne() {
var privateVar = 0;
function foo() {
bar(privateVar);
}
function bar(n) {
console.log(n);
}
return {
foo: foo
};
}
var myFeature = featureOne();
myFeature.foo();
});
这样我只公开函数foo()
,因此bar()
和privateVar
是私有的,无法从其他模块访问。
问题
现在,让我们假设我需要将一些私有函数用于其他模块 - featureTwo()
- 作为其中的一部分,提供完全相同的功能。但是,这两个模块应该保持彼此分离,因为它们对不同的事件做出反应或依赖于不同的因素。基本上,除了"共享"代码连接它们。
实现这一目标的最佳/正确方法是什么?目标是避免代码重复并保持清洁。我正在考虑移动"共享"代码的一部分在全球范围内,但我觉得这不是最佳方式。
对于正确组织代码的任何建议表示赞赏。
答案 0 :(得分:1)
您可以定义一个getter / setter,并使用前面的_
命名这些函数,以表明它们不应该被混淆:
$(function() {
'use strict';
// Example feature module
var featureOne = (function() {
var privateVar = 0;
function bar(n) {
console.log(n);
}
return {
foo: function() {
bar(privateVar);
return this;
},
_getPrivateVar: function() {
return privateVar;
},
_setPrivateVar: function(val) {
privateVar = val;
return this;
}
}
})()
var myFeature = featureOne;
myFeature.foo(); //logs 0
console.log(myFeature._getPrivateVar()) //logs 0
myFeature._setPrivateVar('hi').foo() //logs 'hi'
});