我有一個簡單的點符號getter函數,我很想有一個以相同方式工作的setter。有任何想法嗎?實現點符號Getter/Setter
var person = {
name : {
first : 'Peter',
last : 'Smith'
}
};
// ---
var dotGet = function(str, obj) {
return str.split('.').reduce(function(obj, i) {
return obj[i];
}, obj);
};
var dotSet = function(str, value, obj) {
// updated, thx to @thg435
var arr = str.split('.');
while (arr.length > 1) {
obj = obj[arr.shift()];
}
obj[arr.shift()] = value;
return obj;
}
// returns `Peter`
var a = dotGet('person.name.first', person);
// should set `person.name.first` to 'Bob'
var b = dotSet('person.name.first', 'Bob', person);
是否有您不使用本機JS如下'的console.log(person.name.first)的理由;'和'person.name.first = '鮑勃' ;'? –
請參閱http://stackoverflow.com/questions/10934664/convert-string-in-dot-notation-to-get-the-object-reference和其他許多 – georg
@skwee我使用get/set來訪問類中的私有變量,上面的代碼只是一個簡化 – ezmilhouse