在回调中获得正确的上下文(this)

时间:2017-07-25 13:05:39

标签: javascript angular typescript datacontext

我尝试在回调中调用函数并对类上下文执行某些操作(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)
}

2 个答案:

答案 0 :(得分:2)

您应该使用胖箭头函数作为回调来获得正确的上下文:

() => {}

答案 1 :(得分:0)

您需要bind()函数上下文,然后调用它。

callb.bind(self)(xhttp.response);

而不是

callb(xhttp.response).bind(self);