jQuery-插件选项默认扩展()
jQuery - plugin options default extend()
按照良好的jQuery插件/编写说明,我对有一个小问题
(function($){
// Default Settings
var settings = {
var1: 50
, var2: 100
};
var methods = {
init : function (options) {
console.log(settings);
settings = $.extend(options, settings); // Overwrite settings
console.log(settings);
return this;
}
, other_func: function () {
return this;
}
};
$.fn.my_plugin = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || ! method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.my_plugin');
}
};
})(jQuery);
如果我做
>>> $('my_element').my_plugin({var3: 60})
Before Object { var2=100, var1=50}
After Object { var3=60, var2=100, var1=50}
[ my_element ]
>>> $('my_element').my_plugin({var1: 60})
Before Object { var1=50, var2=100}
After Object { var1=50, var2=100}
[ my_element ]
为什么我的var1
没有被覆盖?
您混淆了$.extend
中参数的顺序(目标应该是第一个),它应该是:
settings = $.extend(settings, options);
参见此小提琴和$.extend()
文档
为了避免混淆,你也可以用默认值来扩展你的设置,比如:
methods.init = function(options){
var settings = $.extend({
key1: 'default value for key 1',
key2: 'default value for key 2'
}, options); // <- if no / undefined options are passed extend will simply return the defaults
//here goes the rest
};
您正在覆盖默认值。尝试在init方法中创建一个新的变量来存储设置。
var defaults = {
var1: 50
, var2: 100
};
var methods = {
init : function (options) {
console.log(defaults);
var settings = $.extend({},defaults,options || {});
console.log(settings);
$(this).data("myPluginSettings",settings);
return this;
}
, other_func: function () {
console.log(this.data("myPluginSettings"));
return this;
}
};
相关文章:
- 使用默认函数扩展 JavaScript 对象
- 'Body'在chrome扩展中打开默认电子邮件客户端时为空
- 系统配置默认扩展对 Django 不起作用
- 更改.js扩展默认编辑器 (Win7)
- 扩展默认的 Less.js 函数
- 创建自定义 PropType,以扩展 react 中的默认 PropType
- 如何使用javascript将默认文件扩展名放在另存为对话框中
- jQuery-插件选项默认扩展()
- React.Component是导出时的默认扩展
- Imacros.默认情况下,即使提到扩展名,文件也会附加扩展名
- 添加Chrome扩展时的本地化问题——说我没有指定默认的语言环境,尽管我指定了
- 扩展jQuery插件并更改默认值
- 更改JavaScript中的默认图像扩展名
- 是否可以使用Google Chrome扩展来更改默认搜索引擎
- 如何使用Angular扩展默认选项
- 错误:github推送后未指定默认引擎,也未提供扩展
- 扩展默认,选项覆盖一切
- 扩展默认的OpenLayers编辑样式
- Chrome扩展默认html或404(用于单页应用程序路由)
- Mongoose扩展默认验证