【发布时间】:2013-01-06 15:40:36
【问题描述】:
我一直在寻找一种使用构造函数模块模式访问私有属性的方法。我想出了一个可行的解决方案,但不确定这是最优的。
mynamespace.test = function () {
var s = null;
// constructor function.
var Constr = function () {
//this.s = null;
};
Constr.prototype.get = function () {
return s;
};
Constr.prototype.set = function (s_arg) {
s = s_arg;
};
// return the constructor.
return new Constr;
};
var x1 = new mynamespace.test();
var x2 = new mynamespace.test();
x1.set('x1');
alert('x1 get:' + x1.get()); // returns x1
x2.set('x2');
alert('x2 get:' + x2.get()); // returns x2
alert('x1 get: ' + x1.get()); // returns x1
【问题讨论】:
-
这与当前的 JavaScript 一样好。但是,您不应返回“新构造函数”(即实例),而应仅返回构造函数本身 (
return Constr;)。 -
你不能有 optimal(例如,利用
prototype继承)隐藏在 JavaScript 中的私有成员。您可以拥有具有prototype继承的虚假私有成员(例如this._imAPrivateMember),仅此而已。在您的情况下,您创建的每个new mynamespace.test都定义了一个新的Contr和一个prototype链。 -
感谢您的帮助。我的意思是每次都创建一个新实例,因为我想存储在特定实例化的原型函数之间共享的私有属性。 ECMA5 是否满足了这一需求?
标签: javascript properties module prototype private