我可以在JavaScript类上创建私有成员,如下所示:
function Class(_foo, _bar) {
var foo = _foo, // private, yay
bar = _bar; // also private, also yay
}
如何为此类实现通用的setter / getter方法?我想有一种方法可以使用 eval
:
function Class(_foo, _bar) {
var foo = _foo,
bar = _bar;
this.get = function(property) {
return eval(property);
};
this.set = function(property, value) {
eval(property + " = " + value);
};
}
但是,这个解决方案很难看 . 另一种方法是创建一个 private
对象,然后访问该属性:
function Class(foo, bar) {
var private = {
foo: foo,
bar: bar
};
this.get = function(property) {
return private[property];
};
this.set = function(property, value) {
private[property] = value;
};
}
不过,我也不太喜欢这个解决方案,因为这意味着我必须在整个地方访问 private
对象 . 当然,有一种更简洁的方法可以为JavaScript类提供私有属性的通用getter / setter?
我意识到已经提出了类似的问题,但似乎没有人问这个具体的问题;也就是说,如何为类中的所有私有属性提供单个getter / setter .
这是一个带有两个例子的jsFiddle .
1 回答
我想你应该看看ES5的吸气剂和制定者 . 这些允许您创建看起来像属性的东西,但真正调用它们背后的函数 . 例如:
您还可以在构造函数中创建getter和setter,但语法很笨拙 . 像这样:
你可以用_820226做更多的事情 . 在MDN阅读所有相关内容