2010-07-26 62 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

相關問題