2010-07-26 22 views
3

我只是在使用jQuery扩展JavaScript对象时偶然发现了一个小问题。执行

var item = $.extend(options.itemDefaults, item); 

options.itemDefaults当扩展与已经在item并且将结果传递到item属性。到现在为止还挺好。

但在执行这条线的下一个时间,options.itemDefaults拥有所有的属性值是item不得不代替了原来的默认值。我的默认值已丢失!

我意识到我可以简单地将默认对象存储在一个临时变量中,而是扩展临时变量,但它看起来有点冗长。有没有一种方法可以做我以后的事情(在没有值的情况下,使用提供的默认值覆盖默认值,而不会改变默认的对象)没有绕行?

更新:看起来这不像我希望的那样容易。当我在每次迭代做

var defaults = options.itemDefaults; 
var $item = $.extend(defaults, { attributeModel: options.attributeModel }, item); 
defaults = undefined 

,我仍然itemoptions.itemDefaults添加属性!我如何解决这个问题?

回答

9

尝试,

var item = $.extend(true, {}, options.itemDefaults, item); 

true标志指示deep copy必须进行。

我们使用空对象{}作为目标,所以默认值不会被篡改。

options.itemDefaultsitem的属性将被复制到空对象中。

+0

太棒了!这正是我以后的事。谢谢! =) – 2010-07-26 08:13:15

+0

不客气,很高兴它帮助:) – Anurag 2010-07-26 08:36:57

相关问题