经验法则是不要修改你不拥有的东西。请考虑使用这种方法作为您的示例;
var myObj = {};
var xhr = new XMLHttpRequest();
myObj.xhr = xhr;
myObj.customProperty = 4;
myObj.customFunc = function () {
// use this.xhr
}
// Now pass myObj around instead, you have a reference to xhr (myObj.xhr)
// and your customProperty (myObj.customProperty).
由于闭包在 JavaScript 中的工作方式,您还应该可以访问定义onreadystatechange
函数时范围内的变量,这再次完全消除了对this
上下文的需要;
var xhr = new XMLHttpRequest();
var something = function () {
// I have access to "xhr" because of closures.
};
xhr.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
// I still have access to "something" here because of closures;
}
}
// xhr.open && send.
...即使您没有闭包(例如,onreadystatechange
在不同的范围内定义),您也应该考虑修改代码以允许您传递完成工作所需的必要变量。