jQuery 插件中的私有变量
private variable in jQuery plugin
我正在制作一个 jQuery 插件,其中每个元素都应该有自己的变量。我认为这样做的正确方法是:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div>test 1</div>
<div>test 2</div>
<script language="javascript">
$.fn.menu = function(options) {
var defaults = {i : 0};
this.each(function(){
var parameters = $.extend(defaults, options);
$(this).on("click", function(event){parameters.i++;alert(parameters.i);});
});
};
$("div").menu();
</script>
但它不起作用:参数对象是全局的,因此在调用插件的所有元素之间共享。
这个例子有什么问题?
使用 var parameters = $.extend(defaults, options);
,parameters
是对(扩展的)defaults
对象的引用。
Keep in mind that the target object (first argument) will be modified,
and will also be returned from $.extend().
您需要创建一个新的对象引用,将空对象传递给 jQuery extend()
方法:
var parameters = $.extend({}, defaults, options);
这相当于:
var parameters = $.extend(JSON.parse(JSON.stringify(defaults)), options);
我正在制作一个 jQuery 插件,其中每个元素都应该有自己的变量。我认为这样做的正确方法是:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div>test 1</div>
<div>test 2</div>
<script language="javascript">
$.fn.menu = function(options) {
var defaults = {i : 0};
this.each(function(){
var parameters = $.extend(defaults, options);
$(this).on("click", function(event){parameters.i++;alert(parameters.i);});
});
};
$("div").menu();
</script>
但它不起作用:参数对象是全局的,因此在调用插件的所有元素之间共享。
这个例子有什么问题?
使用 var parameters = $.extend(defaults, options);
,parameters
是对(扩展的)defaults
对象的引用。
Keep in mind that the target object (first argument) will be modified, and will also be returned from $.extend().
您需要创建一个新的对象引用,将空对象传递给 jQuery extend()
方法:
var parameters = $.extend({}, defaults, options);
这相当于:
var parameters = $.extend(JSON.parse(JSON.stringify(defaults)), options);