2016-01-22 108 views
1

我試圖通過擴展兩個對象來創建一個對象。嵌套對象的JQuery擴展 - 在擴展上設置道具也改變了原來的擴展對象

我通過擴展「選項」和「默認」對象來創建設置對象。 這個工程,但後來我設置settings.limit = 1000,我的「default.limit」也將設置爲1000.

這是行爲設計​​?如果是,什麼是推理,我怎樣才能避免這種情況?

這裏也是小提琴:https://jsfiddle.net/cq3d55bn/

var defaults = { validate: false, limit: { a: 1, b: 2 }, name: "foo" }; 
var options = { validate: true, name: "bar" }; 

// Merge defaults and options, without modifying defaults 
var settings = $.extend({}, defaults, options); 
console.log(settings);//everything is correct here 
var limit = settings.limit; 
limit.a = 1000; 
console.log('after',defaults);//here defaults.limit = 1000 !?!?! 
+0

'jQuery.extend()'文檔(http://api.jquery.com/jQuery.extend/)表示_Merge默認值和選項,沒有修改默認值_,所以我也想知道結果。我基於jQuery文檔頁面上的最後一個示例創建了另一個小提琴並獲得相同的結果:https://jsfiddle.net/xyt8nsvx/ – Jan

回答

0

我沒想到這種行爲要麼,但你可以通過更換

var limit = settings.limit; 
limit.a = 1000; 

settings.limit = { a: 1000, b: settings.limit.b }; 

https://jsfiddle.net/xyt8nsvx/1/

避免