理解jQuery$.extend()的正确用法
Understanding jQuery $.extend() correct usage
我有一个jQuery图像库插件,最近的一个pull请求让我怀疑我是否正确使用了extend()
。
我目前使用的格式是:
$.fn.collagePlus = function( options ) {
// Defaults
var settings = $.extend( {
"someDefault" : true
...
}, options);
但在阅读文档时,我似乎应该这样做:
var settings = $.extend( {}, $.fn.collagePlus.defaults, options );
虽然我有一些动态的默认值,所以我可能应该这样做:
var defaults = { "someDefault" : true };
var settings = $.extend( {}, defaults, options );
我应该使用什么方法?
extend方法可以描述如下:
$.extend(target, more1, more2, moreN);
其中target
将是用来自more1...N
的所有属性按以下顺序扩展的对象:
var target = {};
var more1 = {a: 1, b: 2};
var more2 = {b: -2, c: -3};
$.extend(target, more1, more2);
console.log(target); // {a: 1, b: -2, c: -3}
正如您所看到的,目标对象将接收来自第一个more1和第二个more2的属性。
至于您的情况,您可以使用这三种方法,但我建议您使用第二种方法,因为它可以覆盖默认值,因为它们可以使用:($.fn.plugin.defaults
)从全局范围访问。
$.fn.plugin.defaults
然后,你的插件的用户可以在他使用的内容中为插件设置默认值:
$.fn.plugin.defaults.something = false;
并且没有初始化插件与该信息相乘:
// Top of file, config file or so:
$.fn.plugin.defaults.something = false;
// Somewhere else
$(a).plugin();
$(b).plugin();
// If this pattern is not used you will have to do:
$(a).plugin({something: false});
$(b).plugin({something: false});
$.extend(true,target,more)
一个副节点是,如果true
作为第一个参数传递给$.extend
,jQuery将使深度克隆的评级高于浅层克隆:
var target = { a: { a: 1 } };
var more = { a: { b: 2 } };
$.extend(target, more);
console.log(target) { a: { b: 2 } }
var target = { a: { a: 1 } };
var more = { a: { b: 2 } };
// V--- Note true here
$.extend(true, target, more);
console.log(target) { a: { a: 1, b: 2 } }
静态与动态默认值:
$.fn.plugin = function() {
return this.each(function() {
var options = $.extend({}, $.fn.plugin.defaults, {
images: $(this).children()
}, arguments[0]);
});
};
$.fn.plugin.defaults = { something: true, text: "Default Text" };
您的第一个调用是可以的,因为选项将合并到第一个对象(默认值)中,该对象仅在那里创建和使用。只有当默认对象在另一个地方声明并在多个调用之间共享时,才需要第二种语法,因为合并可能会更改默认对象。
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- Jquery元素用法
- Wordpress jQuery 脚本不会在具有 jQuery.noConflict 用法的一个实例上启动
- 循环中 setTimeout 的 Jquery 用法
- jquery的两种用法相互冲突
- jQuery中的用法
- 理解jQuery$.extend()的正确用法
- Jquery CSS显示属性设置为''这是有效的用法吗?
- Jquery插件函数参数用法
- 如何在代码中找到jQuery或Zepto的所有用法
- 工具/插件查找CPU&Jquery的Ram用法
- jQuery绑定函数和(this)用法