我对我的jQuery插件的局部变量有疑问。我很确定如果我在主jQuery函数寄存器之外声明它们,那么每次调用插件时它都会重新定义变量。
示例:
(function($){
jQuery.fn.test = function(options){
if ( options ) {
$.extend( settings, options );
}
this.each(function(i,item){
// do whatever i am going to do
});
};
var settings = {
value1: "hello",
value2: "word"
};
})(jQuery);
假设多次调用$(object).test({value1:'newterm'});
..我是否认为每次调用该方法时都会更正,它会覆盖最近声明的设置的设置?
如果我想要插件的多个实例,是否需要在主jQuery.fn.test = function(){//here}
方法的范围内声明所有内容?
答案 0 :(得分:6)
是的,这是正确的,因为$.extend
将修改{j}初始化函数在全局对象jQuery上设置settings
时公开的闭包范围中的.test
。每次执行.test
时,关闭范围都是相同的;因此,所有对象都将保留更改。
答案 1 :(得分:3)
这取决于您将对象传递给$ .extend的顺序。传递的第一个(目标)对象将被修改,在您的情况下是设置对象。如果你想保留默认值:
$.extend(options, settings);
或者获得一个全新的对象:
var newoptions = $.extend({}, options, settings);