すべてのフィールドを含むオブジェクトと、それらに読み書きする関数を持つJavascriptコンストラクターがあります。
function myObj(){
var _settingsStore {
setting1: 1, //default value
setting2: 2, //default value
}
//gets/sets _settingsStore.settingName, does other stuff
function _genericSet(settingName, settingValue){}
function _genericGet(settingName){}
各フィールドの周りにプログラムでプロパティを作成したいと思います:
for (var _setting in _settingsStore){
var _str = _setting.toString();
Object.defineProperties(this, {
_str: {
get: function() {return _genericGet(_str)},
set: function(value) {return _genericSet(_str, value)}
}
})
}
私の意図は、_str を純粋に変数にすることであり、それmyObj.setting1
をmyObj.setting2
定義する必要があります。代わりに、ループはmyObj._str
2 回定義しようとします。
キャッチされていない TypeError: プロパティを再定義できません: _str
どうしたの?そして、私の望ましい行動を得る方法はありますか?
編集:明確にするために、これは私が効果的に起こしたいことであり、ループの外側で展開されただけです:
Object.defineProperties(this, {
settings1: {
get: function() {return _genericGet("settings1")},
set: function(value) {return _genericSet("settings1", value)}
},
settings2: {
get: function() {return _genericGet("settings2")},
set: function(value) {return _genericSet("settings2", value)}
},
//and so on, if there are more of them
})