在jQuery插件默认值中使用对象

在jQuery插件默认值中使用对象,jquery,jquery-plugins,extend,javascript-objects,Jquery,Jquery Plugins,Extend,Javascript Objects,我有一个代码笔代表我的问题: 在代码笔中,我创建了一些简单的插件初始化函数,并在应用程序开始运行时注销设置 我的问题是,当我console.log(app.settings)看到我的默认对象,以及合并在一起的新选项对象,但我没有看到我默认对象(foo3)中的最后一个键。这是因为运行$.extend()时,选项对象会覆盖默认对象吗?如果是,有没有办法将嵌套对象与$.extend()合并 为清楚起见: 默认对象: var defaults = { test: 'foo',

我有一个代码笔代表我的问题:

在代码笔中,我创建了一些简单的插件初始化函数,并在应用程序开始运行时注销设置

我的问题是,当我
console.log(app.settings)
看到我的默认对象,以及合并在一起的新选项对象,但我没有看到我默认对象(foo3)中的最后一个键。这是因为运行
$.extend()
时,选项对象会覆盖默认对象吗?如果是,有没有办法将嵌套对象与$.extend()合并

为清楚起见:

默认对象:

var defaults = {
      test: 'foo',
      obj: {
        key1: null,
        key2: null,
        key3: 'foo3'
      }
    }
选项对象:

$('#foo').fooTest({
  obj: { 
    key1: 'foo1',
    key2: 'foo2'
  }
});
记录应用程序设置时的结果:

test: 'foo',
          obj: {
            key1: null,
            key2: null
          }
        }
key3
去了哪里

是否因为选项插件将新的obj定义为{code>obj:{},所以被覆盖


如果是这样,我如何将extend与嵌套对象一起使用并确保它们不会被覆盖?

是的,您的对象正在被覆盖。但幸运的是,
$.extend
接受boolean作为允许深度扩展的第一个参数

只要做:

app.settings = $.extend(true, defaults, options); //this will override defaults
app.settings = $.extend(true, {}, defaults, options); //this will not
//app.settings will be the same with both way

是的,您的对象正在被覆盖。但幸运的是,
$.extend
接受boolean作为允许深度扩展的第一个参数

只要做:

app.settings = $.extend(true, defaults, options); //this will override defaults
app.settings = $.extend(true, {}, defaults, options); //this will not
//app.settings will be the same with both way

使用
jQuery.extend
函数的
deep
参数。这将使扩展函数递归工作

app.settings = $.extend(true, {}, defaults, options); 
,您可以找到更多关于
jQuery.extend
函数及其用法的示例


但是要小心,因为它是在jQuery v1.1.4中添加的,正如官方文档所说,不支持为第一个参数传递
false

使用
jQuery.extend
函数的
deep
参数。这将使扩展函数递归工作

app.settings = $.extend(true, {}, defaults, options); 
,您可以找到更多关于
jQuery.extend
函数及其用法的示例


但是要小心,因为它是在jQuery v1.1.4中添加的,正如官方文档所说,不支持为第一个参数传递
false

Ugh,我甚至在文档中查看了这个示例,但没有看到其中的“true”。谢谢你的详细回答和不同的变化。我对两个答案都感到困惑,一个有{}arg,另一个没有,所以这更清楚了。再次感谢!我的好意,这就是为什么会这样!呃,我甚至看了文档中的示例,但没有看到其中的“真”。谢谢你的详细回答和不同的变化。我对两个答案都感到困惑,一个有{}arg,另一个没有,所以这更清楚了。再次感谢!我的好意,这就是为什么会这样!谢谢你这么快回答!谢谢你这么快回答!