当将对象作为参数传递时,JavaScript 通过引用传递对象,这使得创建对象的本地副本变得非常困难。
var o = {};
(function(x){
var obj = x;
obj.foo = 'foo';
obj.bar = 'bar';
})(o)
o将有 .foo和 .bar。
可以通过克隆来解决这个问题; 简单的例子:
var o = {};
function Clone(x) {
for(p in x)
this[p] = (typeof(x[p]) == 'object')? new Clone(x[p]) : x[p];
}
(function(x){
var obj = new Clone(x);
obj.foo = 'foo';
obj.bar = 'bar';
})(o)
o不会有 .foo或 .bar。