2012-08-17 79 views
0

为试用我的目的阅读this mdn article about inheritance后,我想创造直接来自XMLHttpRequest的继承像这样的对象:JavaScript错误与继承请求对象

function Request(url){ 
    XMLHttpRequest.call(this); 
}; 

Request.prototype = Object.create( 
    new XMLHttpRequest(),{ 
    'constructor' : { 
     'value' : Request, 
     'enumerable' : true 
    }, 

    'toString' : { 
     'value' : function(){ 
      return '[Object Request]'; 
     }, 
     'enumerable' : true 
    } 
}); 

这本身不会造成任何麻烦,但是当我尝试使用一个实例。刚创建后调用继承。开(方法,位置) - 方法使得浏览器抛出这个错误:

screenshot of error

有谁有一个想法,为什么这个错误是扔?我尝试了与其他对象的继承技术,它工作得很好,为什么不用XMLHttpRequest呢?

问候philipp

+0

签出jQuery的.Ajax().Post().Get()方法他们已经做了类似于你想要的maby? – John 2012-08-17 14:05:34

+0

我知道jquery可以做所有事情,所以我想尝试一下。 – philipp 2012-08-17 14:08:26

回答

1

大多数DOM构造函数不能被继承。我不知道你没有得到WRONG_THIS_ERROR ...

I tried this technique of inheritance with other Objects and it worked very fine

它适用于功能的构造,因为他们.call method做类似的事情为[[construct]]称为as a constructor with the new keyword什么时候。

Why not with the XMLHttpRequest?

因为它是天然的对象及其[[construct]]将调用一些本机代码,而不是[[call]]荷兰国际集团的功能体。其实[[call]]行为将被定义为像[[construct]]一样工作,因此XMLHttpRequest可以在没有new的情况下被调用,但也会返回一个新的实例。你可以尝试xhr = XMLHttpRequest.call(anything) - 它不会改变anything,但返回一个新的对象。

而不是从它继承(或甚至扩展本地原型),围绕它构建一个包装。