Javascript 作为计数器的静态变量

Javascript 作为计数器的静态变量,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在编写一个jQuery插件,需要跟踪页面上使用该插件的对象的数量。有没有办法在插件中创建一个跟踪自身实例的静态变量 以下是迄今为止我对该插件的了解: (function ($) { $.fn.my_plugin = function (options) { var plugin_count = 0; return this.each(function() { alert(++plugin_count);

我正在编写一个jQuery插件,需要跟踪页面上使用该插件的对象的数量。有没有办法在插件中创建一个跟踪自身实例的静态变量

以下是迄今为止我对该插件的了解:

(function ($) {
    $.fn.my_plugin = function (options)
    {
        var plugin_count = 0;

        return this.each(function() {
            alert(++plugin_count);
        });
    }
}(jQuery));
在我的页面上:

<div class="plugin_div"></div>
<div class="plugin_div"></div>
<div class="plugin_div"></div>
<div class="plugin_div"></div>

<script language="javascript">
    $('.plugin_div').my_plugin();
</script>

$('.plugin_div').my_plugin();
当页面加载时,我收到四个警报,显示“1”

如何编写此代码,以便调用
my_plugin()
的每个元素的变量都会递增

编辑:修复了错误的复制粘贴作业。

您可以执行以下操作:

(function ($) {
    $.fn.my_plugin = function (options)
    {
        $.fn.my_plugin.count = $.fn.my_plugin.count || 0;

        return this.each(function() {
            alert(++$.fn.my_plugin.count);
        });
    }
}(jQuery));
或者不要使用
$.fn
而是
$.my_plugin.count
,这样您也可以将插件的默认值定义为:

$.my_plugin = {
    count : 0,
    defaults : {}
};

// Extend options with plugin defaults!
$.extend(options, $.my_plugin.defaults); 
您可以这样做:

(function ($) {
    $.fn.my_plugin = function (options)
    {
        $.fn.my_plugin.count = $.fn.my_plugin.count || 0;

        return this.each(function() {
            alert(++$.fn.my_plugin.count);
        });
    }
}(jQuery));
或者不要使用
$.fn
而是
$.my_plugin.count
,这样您也可以将插件的默认值定义为:

$.my_plugin = {
    count : 0,
    defaults : {}
};

// Extend options with plugin defaults!
$.extend(options, $.my_plugin.defaults); 

在JavaScript中,函数是一级对象,因此可以在其上存储任意属性,例如
$.fn.my_plugin.which


当然,如果不重复函数名就可以这样做会更好,但是
参数。被调用方
已被弃用,因此您必须继续使用完整的函数名。

在JavaScript中,函数是一流的对象,因此您可以在其上存储任意属性,例如
$.fn.my_plugin。无论什么


当然,如果不重复函数名就可以这样做会更好-但是
参数。被调用方
已被弃用,因此您必须继续使用完整的函数名。

只需将“plugin\u count”的声明移到函数外:

(function ($) {
    var plugin_count = 0;

    $.fn.my_plugin = function (options)
    {
        return this.each(function() {
            alert(++plugin_count);
        });
    }
}(jQuery));

它捕获外部匿名函数调用形成的闭包中的“plugin_count”。无需将计数作为任何显式对象的属性进行维护,这时闭包将为您执行此操作。

只需将“plugin\u count”的声明移动到函数外部:

(function ($) {
    var plugin_count = 0;

    $.fn.my_plugin = function (options)
    {
        return this.each(function() {
            alert(++plugin_count);
        });
    }
}(jQuery));

它捕获外部匿名函数调用形成的闭包中的“plugin_count”。无需将计数作为任何显式对象的属性进行维护,因为闭包可以为您实现这一点。

您的问题有点让人困惑:“…对于调用
my_plugin()
的每个元素”;这是什么意思?你是指每个受插件影响的元素吗?插件迭代的每个元素?每次调用插件时?我想计算使用插件的元素。由于我有4个class
plugin\u div
元素,我希望计数器计数到4,然后下次调用时从5开始?然后,您真正需要做的就是将
var
声明移到plugin函数外部(但在匿名函数内部)。您的问题有点令人困惑:“…对于调用
my_plugin()
”的每个元素”;这是什么意思?你是指每个受插件影响的元素吗?插件迭代的每个元素?每次调用插件时?我想计算使用插件的元素。由于我有4个class
plugin\u div
元素,我希望计数器计数到4,然后下次调用时从5开始?然后,您真正需要做的就是将
var
声明移到插件函数外(但在匿名函数内)。@roXon ah抱歉,我刚刚剪切并粘贴了操作代码。还有,什么??调用插件时会发生
++
,这正是所需的,否?@roXon您正确链接的jsbin会发出警报“1”、“2”、“3”、“4”。现在我承认,问题并不十分清楚究竟应该计算什么。编辑哦哈哈,不用担心。我觉得这个问题有点含糊不清。@roXon啊,对不起,我刚刚剪贴了操作码。还有,什么??调用插件时会发生
++
,这正是所需的,否?@roXon您正确链接的jsbin会发出警报“1”、“2”、“3”、“4”。现在我承认,问题并不十分清楚究竟应该计算什么。编辑哦哈哈,不用担心。我认为这个问题有点模糊。这是一个如此简单的答案,如此明显。谢谢这是一个如此简单的答案,如此明显。谢谢