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

标签 javascript jquery object extend

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

我通过扩展“选项”和“默认”对象来创建一个设置对象。 这可行,但稍后我设置 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 };

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

关于javascript - 嵌套对象的 JQuery 扩展 - 在扩展上设置 props 也会更改原始扩展对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34946124/

相关文章:

javascript - 在 if 条件下使用 id

java - 从另一个类将对象添加到数组列表

javascript - Google map 如何在 DIV 上绘制路线?

javascript - 使用\b 元字符与不使用它的结果相同

javascript - 如何通过 ajax 发送以下数组中的每个元素?

php - 第 1 部分 : jQuery -> MySQL -> jQuery -> HTML

javascript - Svg 元素在容器外时隐藏

javascript - 从 eBay 中的查找商品高级 API 返回商品属性

javascript - 在 javascript 中使用下拉选择值过滤列表

javascript:方法的单独功能或嵌入对象中?