4

在使用 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 

在每次迭代中,我仍然item从on添加属性options.itemDefaults!我该如何解决这个问题?

4

1 回答 1

11

尝试,

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

true标志指示必须进行深层复制。

我们使用一个空对象{}作为目标,因此默认值不会被篡改。

options.itemDefaults和的属性item将被复制到空对象中。

于 2010-07-26T08:07:54.973 回答