我正在尝试通过扩展另外两个对象来创建一个对象。
我通过扩展“选项”和“默认”对象来创建一个设置对象。
这可行,但稍后我设置 settings.limit = 1000
,我的“default.limit
”也将设置为 1000。
这是设计使然吗?如果是,原因是什么?如何避免这种情况?
这也是 fiddle :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 };
关于javascript - 嵌套对象的 JQuery 扩展 - 在扩展上设置 props 也会更改原始扩展对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34946124/