我正在尝试通过扩展另外两个对象来创建对象。
我通过扩展"选项"和"默认"对象来创建设置对象。这有效,但后来我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 !?!?!
我也没想到这种行为,但您可以通过替换来避免它
var limit = settings.limit;
limit.a = 1000;
跟
settings.limit = { a: 1000, b: settings.limit.b };
https://jsfiddle.net/xyt8nsvx/1/