我试图通过扩展另外两个来创建一个对象。
我通过扩展"选项来创建一个设置对象"和"默认"对象。
这有效但稍后我设置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 :(得分:0)
我也没想到会出现这种情况,但你可以通过替换
来避免这种情况var limit = settings.limit;
limit.a = 1000;
带
settings.limit = { a: 1000, b: settings.limit.b };