function LolClass(){
this.init = function(){
button_a.bind("tap", function(){
this.refreshFields(); // doesn't work
//refreshFields(); // doesn't work either
});
}
this.refreshFields = function(){
alert("LOL");
}
this.dummy = function(){
this.refreshFields(); // W O R K S!
}
}
当我点击button_a时,我收到一个引用错误,因为没有“找到”refreshFields方法。
未捕获的ReferenceError:未定义refreshFields 文件:///android_asset/www/src/pages/main.js:70
但是如果我在其他地方调用该方法而不是那个tap侦听器,那就可以了。
我完全确定点击侦听器功能中的this
正在引用事件目标button_a。
我的问题是:最好的(oo)修复是什么?
答案 0 :(得分:8)
试试这个
function LolClass(){
var someVar = 0;
var self = this;
this.init = function(){
button_a.bind("tap", function(){
self.refreshFields(); // now works!
//refreshFields(); // doesn't work
});
}
this.refreshFields = function(){
alert("LOL");
}
this.dummy = function(){
this.refreshFields(); // W O R K S!
}
}
答案 1 :(得分:4)
您应该缓存this
:
var that = this; // "that" is a convention name for "this"
this.init = function(){
button_a.bind("tap", function(){
that.refreshFields();
});
}
答案 2 :(得分:4)
您需要修改代码:
function LolClass(){
var someVar = 0;
var $this = this;
this.init = function(){
button_a.bind("tap", function(){
$this.refreshFields();
});
}
this.refreshFields = function(){
alert("LOL");
}
this.dummy = function(){
this.refreshFields(); // W O R K S!
}
}
内部回调中的“this”指的是不同的对象。我添加了var $ this = this;并在回调中使用$ this。