在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,另一个没有,所以这更清楚了。再次感谢!我的好意,这就是为什么会这样!谢谢你这么快回答!谢谢你这么快回答!