如何在javascript中通过引用将变量传递给事件处理程序?
我用java脚本模拟了一个类,其代码如下:如何在javascript中通过引用将变量传递给事件处理程序?,javascript,jquery,javascript-events,event-handling,Javascript,Jquery,Javascript Events,Event Handling,我用java脚本模拟了一个类,其代码如下: function myclass() { this.count ; this.init = function(){ $("div.mybtn").click({n:this},function(e){ e.data.n.count++; }); } this.getCount = function(){ alert(this.count);
function myclass()
{
this.count ;
this.init = function(){
$("div.mybtn").click({n:this},function(e){
e.data.n.count++;
});
}
this.getCount = function(){
alert(this.count);
}
}
然后我创建了这个类的一个实例并执行了它的方法init()
,但是当我单击任何div.mybtn
元素时,它并没有增加this.count的值
似乎该对象是通过值而不是引用传递给事件处理程序的。
如何通过引用将变量传递给事件处理程序?
感谢您的帮助您可以编写绑定函数并使用事件处理程序绑定上下文
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift();
return function(){
fn.apply(object, args.concat(Array.prototype.slice.call(arguments)));
}
}
function myclass()
{
this.count ;
this.clicked = function(){
this.count++;
};
this.init = function(){
$("div.mybtn").click(this.clicked.bind(this));
}
this.getCount = function(){
alert(this.count);
}
}
Javascript没有通过引用传递的参数。为了满足您的需要,您应该使用一个闭包变量:
this.init = function(){
var self = this;
$("div.mybtn").click(function(){
self.count++;
});
}
您不能增加未定义的,
,您必须从某个地方开始:
function myclass() {
this.count=0; // start counting at zero !!!
this.init = function(){
$("div.mybtn").on('click', {n:this},function(e){
e.data.n.count++;
e.data.n.getCount();
});
}
this.getCount = function(){
console.log(this.count);
}
}
var c = new myclass();
c.init()