嵌套对象的JQuery扩展 - 在扩展上设置props也会更改原始扩展对象

时间:2016-01-22 11:53:27

标签: javascript jquery object extend

我试图通过扩展另外两个来创建一个对象。

我通过扩展"选项来创建一个设置对象"和"默认"对象。 这有效但稍后我设置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 !?!?!

1 个答案:

答案 0 :(得分:0)

我也没想到会出现这种情况,但你可以通过替换

来避免这种情况
var limit = settings.limit;
limit.a = 1000;

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

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