我想写我的第一个简单的jquery插件,但我不知道如何在jQuery对象内创建私有变量。这里是代码jquery插件私人和公共属性
var first;
var second;
$(document).ready(function(){
first = $("#clicker1").demSelector();
second = $("#clicker2").demSelector();
});
$(".totalClicks").click(function(){
alert("Clicks 1 = "+first.number());
alert("Clicks 2 = "+second.number());
});
(function($){
var num = 0;
$.fn.demSelector = function() {
return this.each(function(){
init(this);
});
};
$.fn.number = function(){
return num;
};
function init(control){
$(control).on('click','.num-of-clicks', function(){
num = parseInt($(this).html(),0) + 1;
$(this).html(num);
});
}
})(jQuery);
和演示项目http://jsbin.com/afEduKI/9/edit
当你点击 “0”,它增加和改变变量num。但它改变了第一个和第二个对象的数量。因此,在第一行点击两下并单击“显示”按钮后,我会收到两条消息“点击1 = 2”和“点击2 = 2”,但它应该是“点击1 = 2”和“点击2 = 0”。它看起来像变量num是全局的。
我在做什么错了?
JavaScript不明确支持公共和私有变量。但是,您可以使用[闭包](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work)来模拟它们。 – Blazemonger
我知道JavaScript不支持公共或私人修改器,但我怎么可以让变量“num”是唯一的每个对象? – cmd
这是因为您在事件处理程序中使用回调函数 - 它正在修改名为'num'的全局变量,并且无法访问您的“私有”变量'num'。 – Blazemonger