好吧,我嘗試創建新的對象是這樣的:Object.defineProperty獲取/設置封閉
var src = {a:'a', b:'b', c:'c'};
var out = {};
for(var prop in src){
Object.defineProperty(out, prop,{
get: function(){
return src[prop];
},
set: function(val){
src[prop]=val;
}
})
}
,並得到一個壞的結果:
out = {a:'c', b:'c', c:'c'}
我知道其他的方法來創建這個對象,所以爲:
for (var prop in src) {
(function(prop) {
Object.defineProperty(out, prop, {
get: function() {
return src[prop];
},
set: function(val) {
src[prop] = val;
}
})
})(prop)
}
或:
Object.keys(src).map(function(prop){
Object.defineProperty(out, prop,{
get: function(){
return src[prop];
},
set: function(val){
src[prop]=val;
}
})
})
但我不明白爲什麼,在第一個方法中,一個字符串參數「prop」將通過鏈接發送到函數'defineProperty'。請幫助我理解這一點。 對不起,英語不好。
對我來說,你的其他方式也行不通。即使我嘗試指定類似「out.a =」的東西「 ' – nus
我總是仍然是一個空對象我想出了一種方法來製作泛型setters/getters。 [請參閱我的答案](http://stackoverflow.com/a/18043786/1115652)。 – nus