将对象作为参数传递时,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
。
问题
- 除了创建本地副本/克隆之外,有没有更好的方法来按值传递对象?