[英]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方法?
我知道已經問過類似的問題,但似乎沒有一個人問這個特定問題。 也就是說,如何為類中的所有私有屬性提供單個獲取器/設置器。
這是帶有兩個示例的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的所有信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.