您好我有以下代码,我在调用一个函数,该函数接受一个带参数的回调函数。基本上我试图将e的内容放入this.items但我无法逃避回调函数?
function stash(){
this.items = new Array();
this.get = function(){
opr.stash.query({},function(e){
console.log(this.items); //this is not defined
});
}
}
s = new stash();
s.get();
答案 0 :(得分:2)
问题:回调函数的上下文对象(this
)不再引用get()
方法的上下文对象。
解决方案:bind您对目标对象的回调函数,如下所示:
opr.stash.query({},(function(e){
console.log(this.items);
}).bind(this));
答案 1 :(得分:0)
这已经不在回调的范围内了,所以要引用它,以后可以使用。 .bind(this)在现代浏览器中是一个很好的解决方案,但在旧版本的Internet Explorer中可能会失败,因为该方法可能无法使用。
function stash(){
var self = this;
this.items = new Array();
this.get = function(){
opr.stash.query({},function(e){
console.log(self.items);
});
}
}
答案 2 :(得分:0)
我在d3.chart中遇到了类似的问题。
我目前无权访问opr.stash,因此我无法先测试,但您是否尝试过以下内容:
function stash()
{
var myStash = this;
myStash.items = new Array();
myStash.get = function(){
opr.stash.query({},function(e){
console.log(myStash.items); //this is not defined
});
}
}
s = new stash();
s.get();