13

私が持っているものと必要なもの。それは簡単です。

デフォルトのオプション (ネストされたプロパティがあります):

{
  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"
    }
  }
}

必要なのは、デフォルト オプションを実際のオプションで適切に拡張し、次の結果を取得することです (1 つのプロパティが変更されています)。

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

問題は、 $.extend 関数がネストされたプロパティを無視し、第 1 レベルのプロパティのみを操作することです。ネストされた各プロパティを手動で $.extend しましたが、解決策ではないと思います。

4

1 に答える 1

50

最初のパラメーターとして渡すことにより、再帰的なコピーが必要です。true

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

//recursively merge to a blank object
console.log($.extend(true,{}, defaults, actual))​
于 2012-06-05T05:53:49.097 に答える