访问XMLHttpRequest的某些属性时非法调用

时间:2017-01-12 01:33:51

标签: javascript

当我这样做时

for (key in XMLHttpRequest.prototype) {
    console.log(key);
}

在返回的属性列表中,我得到timeout。在同一个控制台中,当我输入

XMLHttpRequest.prototype.timeout

我收到此错误:Uncaught TypeError: Illegal invocation

为什么?

如何将超时引用的对象分配给另一个变量?

2 个答案:

答案 0 :(得分:1)

您需要在XMLHttpRequest创建的实例上调用getter。它应该已经从XMLHttpRequest.prototype继承,所以以下可能就足够了:

instance.timeout

如果由于某种原因你改变了instance的[[原型]]链或阴影timeout,那么你可以手动调用getter:

Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, "timeout")
      .get.call(instance);

或者,自ES6以来,

Reflect.get(XMLHttpRequest.prototype, "timeout", instance);

答案 1 :(得分:0)

timeout似乎是必须在实际的XHR 实例上调用的getter,而不是XMLHttpRequest.prototype。它没有引用任何对象,您无法将其分配给任何对象。