在回调中获取正确的上下文(this)
Get right context(this) in callback
我尝试在回调中调用函数并使用 class 上下文 (this) 执行某些操作。但是在调用回调函数时,它没有任何上下文。 this
未定义。我用 bind(self)
尝试了一些东西,但没有成功。
export class AppComponent {
connect(call,callb){
var self=this
var xhttp = new XMLHttpRequest();
xhttp.responseType=responseType
xhttp.open("GET", "http://localhost:3000/"+call, true);
xhttp.onreadystatechange = function(){
if (xhttp.readyState == 4 && xhttp.status == 200)
{
callb(xhttp.response).bind(self);
}
};
xhttp.send(null)
}
buildXML(response){
console.log(this) //prints undefined, should print AppComponent or something
}
this.connect("someCall",this.buildXML)
}
您需要 bind()
函数上下文,然后调用它。
callb.bind(self)(xhttp.response);
而不是
callb(xhttp.response).bind(self);
您应该使用粗箭头函数作为回调来获取正确的上下文:
() => {}
我尝试在回调中调用函数并使用 class 上下文 (this) 执行某些操作。但是在调用回调函数时,它没有任何上下文。 this
未定义。我用 bind(self)
尝试了一些东西,但没有成功。
export class AppComponent {
connect(call,callb){
var self=this
var xhttp = new XMLHttpRequest();
xhttp.responseType=responseType
xhttp.open("GET", "http://localhost:3000/"+call, true);
xhttp.onreadystatechange = function(){
if (xhttp.readyState == 4 && xhttp.status == 200)
{
callb(xhttp.response).bind(self);
}
};
xhttp.send(null)
}
buildXML(response){
console.log(this) //prints undefined, should print AppComponent or something
}
this.connect("someCall",this.buildXML)
}
您需要 bind()
函数上下文,然后调用它。
callb.bind(self)(xhttp.response);
而不是
callb(xhttp.response).bind(self);
您应该使用粗箭头函数作为回调来获取正确的上下文:
() => {}