好的,几周前,我了解了 javascript 中的“模块模式”。我发现的所有示例基本上都是这样的:
var module = (function () {
// private variables and functions
var foo = 'bar';
// constructor
var module = function () {
};
// public methods
module.prototype = {
something: function () {
}
};
// return module
return module;
})();
var my_module = new module();
我很兴奋,所以我立即开始了自己的测试:
var myModule = myModule || {};
myModule.User = (function(){
"use strict";
// "private" attribut
var id
//constructor
var User = function(l_id){
id = l_id;
};
//"public" method
User.prototype.getId = function(){ return id };
return User;
})();
var u2 = new myModule.User(2);
var u1 = new myModule.User(1);
console.log(u2.getId()); // print 2
console.log(u1.getId()); //print 2 oO
然而,我没想到所谓的“私有”属性“id”,并不是一个实例变量。如果我注意的话,我会注意到这样一个变量的范围......我严重误解了“私有变量和函数”的评论......
尽管如此,我还是决定找到一种在模块中使用私有实例变量的方法。
目前我发现的唯一解决方案是这种好方法:
myModule.User = (function(){
"use strict";
//constructor
var User = function(id){
this.getId = function(){ return id; };
};
return User;
})();
但是已经没有原型优势了......
您有更好的方法来混合“模块模式”和私有实例变量的使用吗?