2013-03-19 28 views
2

通常,當您使用defaultOptions擴展選項時,將創建一個新對象,但我想重新使用選項對象。見下面的代碼。重複使用選項變量作爲jQuery擴展的輸出

我基本上要做到以下幾點:

var defaultOptions = {'width': '10px', 'size': '10px'}; 

var options = {'width': '300px', 'name': 'sam'}; 

// I want to re-use the same options variable as target for extend 
var optionsAfterExtend = $.extend(options, defaultOptions, options); 

// should return true 
alert(options.width == '300px'); 
alert(optionsAfterExtend == '300px'); 
alert(options.size == '10px'); 
alert(optionsAfterExtend == options); 

// Because I may add extra info to the options object which the client using my plugin can use/re-use 
optionsAfterExtend.data = 'sam'; 

// So now optionsAfterExtend.data and options.data should both equal 'sam' 

試圖尋找了很長時間,並宣讀了jQuery擴展文檔,但無法找到一種合適的方式來做到這一點。這是我愚蠢嗎?即使如此,我仍然很好奇如何以一種很好的方式做到這一點。

+0

如果你'optionsAfterExtend.data =「SAM」;'有沒有辦法'optionsAfterExtend.data == optionsAfterExtend'將返回true,因爲你的支票,如果屬性的值與對象本身相同。 – 2013-03-19 13:51:36

+0

更新問題,這是我的問題不正確的措辭。我也會盡量使問題更清楚。對不起,我感到困惑 – 2013-03-19 13:52:35

+0

你問每次'optionsAfterExtend'改變時如何更新'options'? – 2013-03-19 13:56:11

回答

3

extend方法將所有屬性複製到您作爲第一個參數發送的對象中。要創建一個新的對象,它是人的結合,提供一個空對象作爲第一個參數:

var optionsAfterExtend = $.extend({}, defaultOptions, options); 

如果您還想要options對象有所改變,而且對象是一樣的,做一個新的對象,然後回到它擴大到options

var o = $.extend({}, defaultOptions, options); 
var optionsAfterExtend = $.extend(options, o);