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

JQuery extension of nested objects - setting props on extension also changes the original extended object

本文关键字:扩展 对象 原始 props JQuery 嵌套 设置      更新时间:2023-09-26

我正在尝试通过扩展另外两个对象来创建对象。

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