实现更智能的$ .extend?

时间:2015-06-04 19:34:13

标签: jquery

我们想要声明要在插件中使用的设置集合:

var settings = { x: 0, y: 1 };

然后在通话时使用用户选项扩展/覆盖它们:

function x(opts) {
    opts = $.extend(settings, opts);
...
x({ y: 2 });

...除了嵌套选项外,一切都很好:

var settings = { x: 0, y: 1, files: { path: '/', names: { xml: 'x', kml: 'k' } } }

x({ files: { path: '/tmp' } });

会清除files的内容,使名称消失。

我的兴趣是只指定文件路径,但$.extend并不足以实现这一目标。或者是吗?这通常是如何处理的?

1 个答案:

答案 0 :(得分:2)

它已经使用$.extend的深度参数实现:

jQuery.extend( [deep ], target, object1 [, objectN ] )

例如:

var settings = {
  x: 0,
  y: 1,
  files: {
    path: '/',
    names: {
      xml: 'x',
      kml: 'k'
    }
  }
};

function x(opts) {
  opts = $.extend(true, settings, opts);
  console.dir(opts);
}

x({
  files: {
    path: '/tmp'
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

<!-- open your browser's console to see the output -->