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