我试图覆盖XMLHttpRequest对象上的getResponseBody
方法。代码看起来如此:
xhr.onreadyStateChange = function(){
if (xhr.readyState !== 4) {
return;
}
if (xhr.status === 200) {
// callback to handle the result
} else {
var _orig = xhr.getResponseHeader;
xhr.getResponseHeader = function(name){
return decodeHeader(_orig.apply(xhr,[name]));
};
// callback to handle the failure
}
}
调用_orig.apply
时会抛出错误“对象不支持此属性或方法”。
有什么想法吗?感谢。
PS:我每次都创建一个新的XHR对象,不要重用旧的XHR对象。
答案 0 :(得分:3)
XMLHttpRequest
是host object(即环境提供的对象,用于表示环境的某些内容而不是语言的一部分),主机对象基本上可以做任何他们喜欢的事情。它们不受与内置对象相同的规则的约束。 IE尤其值得注意的是利用这种自由,许多宿主对象(包括XMLHttpRequest
)的行为并不像人们希望的那样。
出于这个原因,最好不要尝试添加或更改任何主机对象的任何属性。而是编写自己的XMLHttpRequest
包装器。