在XMLHttpRequest回调中使用此关键字与变量名有什么区别?
var req = new XMLHttpRequest();
req.open("GET", encodeURI(uri), true);
req.onreadystatechange = function () {
if (this.readyState == 4) {
req.onreadystatechange = null; //avoid memory leaks
if (this.status == 200) {
var res = JSON.parse(req.responseText).d;
console.log(res);
}
}
};
req.send();
我可以使用 req 代替此,例如if (req.readyState == 4)
吗?
答案 0 :(得分:0)
默认情况下onreadystatechange
处理程序没有区别this
是指XMLHttpRequest
对象本身。
是的,您可以使用this
或req
答案 1 :(得分:0)
我自己最近遇到过类似的问题,但我将其扩展到更一般的情况:回调中哪个上下文this
解决了?
关于3种流行的回调类型: setTimeout , XMLHttpRequest , DOM
我从第一个类型的文档中读取, setTimeout ,this
将解析为 window 对象
对于 XMLHttpRequest 情况,this
将解析为XMLHttpRequest对象本身,https://stackoverflow.com/a/6542261/4730119这个链接会给你一个解释,这是我的测试,为此我GET请求 api.json 的内容是一个简单的简单对象并在控制台中成功打印,注意我使用this.responseText
,而不是像使用XHR对象request.responseText
教授的大多数书一样
并且最后为 DOM ,它就像XHR一样,this
将解析为添加了回调的对象
document.querySelector('input')
.addEventListener('input', function(e){console.log(this)});
// will print input object