【发布时间】:2015-09-20 16:01:15
【问题描述】:
在一项任务中,我必须通过将对象传递给函数来更改它。几乎是这样的:
function change(obj) {
return {
fn1: function() {
obj['three'] = 3;
},
fn2: function() {
obj = {'four':4};
}
};
}
var obj = {'one':1,'two':2};
console.log(obj); // output 'Object {one=1, two=2}'
var temp = change(obj);
temp.fn1();
console.log(obj); // output 'Object { one=1, two=2, three=3}'
temp.fn2();
console.log(obj); // output 'Object { one=1, two=2, three=3}'
fn1 用于更改对象的值之一。如您所见,它打算将 obj[three] 设置为 3,并且效果很好。
fn2 用于替换另一个对象。执行后obj应该只包含'four':4。但是它不起作用。
然后我检查 fn2 里面的 obj 的值:
...
fn2: function() {
console.log('before fn2',obj);
obj = {'four':4};
console.log('after fn2', obj);
}
};
...
输出是:
'before fn2 Object{one=1,two=2,three=3}'
'after fn2 Object{four=4}'
所以它确实在 fn2 中工作。我对 fn2 失败而 fn1 工作感到困惑。如何解决?
【问题讨论】:
-
使用第二个函数,您将更改局部变量
obj的原始引用并将其分配给新对象。与此问题相同的基本问题:stackoverflow.com/questions/30930560/…
标签: javascript