javascript - 是否有正确的方法来 $.extend jQuery 中的嵌套属性?

标签 javascript jquery

我有什么,我需要什么。这很容易。

默认选项(有嵌套属性):

{
  sDom: 'frt<"tfoot"lp>',
  bInfo: false,
  sPaginationType: "full_numbers",
  oLanguage: {
    sSearch: "",
    sLengthMenu: "Show _MENU_",
    oPaginate: {
      sFirst:     "|<<",
      sLast:      ">>|",
      sNext:      ">>",
      sPrevious:  "<<"
    }
  }
}

实际选项:

{
  oLanguage: {
    oPaginate: {
      sNext:      "MODIFIED"
    }
  }
}

$.extend 的结果:

{
  sDom: 'frt<"tfoot"lp>',
  bInfo: false,
  sPaginationType: "full_numbers",
  oLanguage: {
    oPaginate: {
      sNext:      "MODIFIED"
    }
  }
}

我需要的是使用实际选项正确扩展默认选项并获得以下结果(一个属性已被修改):

{
  sDom: 'frt<"tfoot"lp>',
  bInfo: false,
  sPaginationType: "full_numbers",
  oLanguage: {
    sSearch: "",
    sLengthMenu: "Show _MENU_",
    oPaginate: {
      sFirst:     "|<<",
      sLast:      ">>|",
      sNext:      "MODIFIED"
      sPrevious:  "<<"
    }
  }
}

问题是 $.extend 函数忽略嵌套属性,只操作一级属性。现在我已经手动 $.extend 每个嵌套属性,但我想这不是解决方案。

最佳答案

你需要a recursive copy通过传递 true 作为第一个参数:

var defaults = {...}
var actual = {...}

//recursively merge to a blank object
console.log($.extend(true,{}, defaults, actual))​

关于javascript - 是否有正确的方法来 $.extend jQuery 中的嵌套属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10892222/

相关文章:

javascript - 使用javascript将GMT转换为IST(印度标准时间)?

javascript - 使用 AngularJS 循环元素

javascript - Dojo 按 ID 查询默认为 getElementById

尽管留在范围内,Javascript 对象仍会丢失状态

javascript - 将 jquery 函数转换为 Javascript 函数

jquery - 如何使用 jquery 动态添加/删除多个 div

javascript - 命名空间 knockout 绑定(bind)上出现意外的 token 错误

javascript - 为动态添加的 HTML 元素添加事件监听器

javascript - 音位间隙的 Style.Transform

javascript - 从函数内调用 setInterval