编写jQuery插件 - 多个实例化

时间:2011-10-17 04:24:11

标签: javascript jquery

我对我的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}方法的范围内声明所有内容?

2 个答案:

答案 0 :(得分:6)

是的,这是正确的,因为$.extend将修改{j}初始化函数在全局对象jQuery上设置settings时公开的闭包范围中的.test。每次执行.test时,关闭范围都是相同的;因此,所有对象都将保留更改。

答案 1 :(得分:3)

这取决于您将对象传递给$ .extend的顺序。传递的第一个(目标)对象将被修改,在您的情况下是设置对象。如果你想保留默认值:

$.extend(options, settings);

或者获得一个全新的对象:

var newoptions = $.extend({}, options, settings);