私有属性的通用setter/getter方法
General setter/getter methods for private properties
我可以像这样在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的两个例子。
我认为你应该看看ES5的getter和setter。它们允许您创建看起来像属性的东西,但实际上是在它们后面调用函数。例如:
var _a : 'nuthin',
var obj = {
get a: function() { return this._a; },
set a: function(a) { this._a = a; }
}
obj.a = 'sumpin';
console.log(obj.a); // nuthin
也可以在构造函数中创建getter和setter,但语法比较笨拙。这样的:
function nooObject(){
var _a = 'nuthin';
Object.defineProperties(this, {
"a": { get: function () { return _a; }
set: function(a) { this._a = a; } }
});
}
你可以用Object.defineProperties
做更多的事情。在MDN
相关文章:
- "实例范围”;TypeScript类的getter/setter
- 如何防止在javascript中执行继承属性的getter-setter方法
- JavaScript 对象中的私有成员,带有 getter 和 setter
- localStorage-对象的getter-, setter-方法的目的是什么?
- 传递参数时如何避免模块模式中的 getter/setter 函数
- 引用属性而不是 getter 和 setter
- 使用特权Getter/Setter函数的JavaScript原型函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用框架/语言中的getter/setter,或者定义自己的显式getter/setters
- 使用getter和setter实现函数链接的方法
- 函数的 setter/Getter 在调用函数时将函数转换为字符串
- 我真的需要在javascript ES6类中使用setter/getter吗
- 嵌套对象的setter / getter
- 使用setter/getter来获取/更新值
- 类属性(Object.assign)的Setter/getter
- 为无父级局部变量定义 Setter/Getter:不可能
- 通过“this"JS中从对象构造函数到setter/getter的指针
- 应该在JavaScript中使用setter/getter方法吗?
- 私有属性的通用setter/getter方法
- 在Javascript中,如何显示setter/getter的函数体