我已经开始在我的一个项目中使用模块模式。据我了解,它是这样的:
var obj = (function(foo){
//Some initialization logic up here.
//Private methods
var privateBazz = function(){
return "I'm known only to this closure!";
}();
//Public methods
return {
publicFoo: foo,
publicBar: function(){
return foo + privateBazz;
}
}
})();
这在纸面上看起来相当不错,而且在实践中似乎运作良好。顶部的初始化逻辑很直观,然后是私有(private)方法,然后是公共(public)方法。
不过,我遇到了一个问题。我应该如何从 return 语句范围之外和 obj 的函数声明范围内调用 publicFoo 或 publicBar?
我目前的解决方案是做类似的事情:
var obj = (function(foo){
//Private methods declared early for use.
var privateBazz = function(){
return "I'm known only to this closure!";
}();
var privateBar = function(){
return foo + privateBazz;
};
//Some initialization logic up here.
var dependentOnBar = privateBar();
//Public methods
return {
publicFoo: foo,
publicBar: privateBar
}
})();
这行得通,但是我的私有(private)变量的声明突然放在了我的对象的私有(private)属性声明之上。如果我试图让私有(private)函数声明尽可能接近首先调用它们的代码,问题就会变得更加严重,所以我只是在顶部声明我需要的所有私有(private)函数,然后再初始化属性。同样,这可行,但我习惯于让代码尽可能接近执行点。所以,在顶部声明私有(private)函数 block 对我来说真的很尴尬。有没有其他人有这种感觉,或者这是我需要为 JavaScript 克服的问题?当我看到这种情况时,我应该采取什么措施吗?
最佳答案
听起来您可以通过简单地不使用对象表示法返回模块来解决这个问题,而是初始化它并在您进行时构建它。这将是这样的:
var obj = (function(foo){
var self = {};
//Some initialization logic up here.
//Private properties
var foo = "only accessible within this scope";
//Private methods
var privateBazz = function(){
return "I'm known only to this closure!";
}();
//Public Properties
self.publicFoo = foo;
//Public Methods
self.publicBar = function(){
return foo + privateBazz;
};
return self;
})();
关于javascript - 使用 JavaScript 模块模式时私有(private)方法应该放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11732818/