Javascript Prototype наследует от ActiveXObject вызывает ошибку в Internet Explorer - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть объект / класс Javascript, который наследуется от ActiveXObject.Но я получаю эту странную ошибку при запуске кода в Internet Explorer (версия 8).

Ошибка: «Объект не поддерживает это свойство или метод»

Можете ли вы сказатьчто означает ошибка и как ее исправить?

Мой код:

  function XMLHandler( xmlFilePath )
  {
     this.xmlDoc  = null;
     this.xmlFile = xmlFilePath;
     this.parseXMLFile( this.xmlFile );

     this.getXMLFile = function()
     {
        return this.xmlFile;
     }
  }

  XMLHandler.prototype              = new ActiveXObject("Microsoft.XMLDOM");
  XMLHandler.prototype.constructor  = ActiveXObject;          // Error occurs here in IE. The error is: "Object doesn't support this property or method"
  XMLHandler.prototype.parseXMLFile = function( xmlFilePath ) // If I comment out the above line then the exact same error occurs on this line too
  {
     this.xmlFile = xmlFilePath;
     this.async="false";  // keep synchronous for now
     this.load( this.xmlFile );
  }

1 Ответ

1 голос
/ 06 ноября 2011

Ошибка довольно очевидна для меня. Что вы делаете:

var x = new ActiveXObject("Microsoft.XMLDOM");
x.extendIt = 42;

И он выдает (загадочную) ошибку, говорящую, что вы не можете расширить экземпляр ActiveXObject новым свойством.

Теперь ActiveXObject является хост-объектом, и известно, что он полон неопределенного поведения. Не расширяй это. Вместо этого используйте его.

var XMLHandler = {
    XMLDOM: new ActiveXObject("Microsoft.XMLDOM"),
    parseXMLFile: function(xmlFilePath) {
        this.xmlFile = xmlFilePath;
        this.XMLDOM.load(xmlFilePath);
    },
    getXMLFile: function () {
        return this.xmlFile;
    }
};

var xmlHandler = Object.create(XMLHandler);
xmlHandler.parseXMLFile(someFile);

(я исправил ваш код, вам понадобится шайба ES5 для поддержки устаревшей платформы).

Конечно, если вы посмотрите на свой код сейчас, вы увидите, что вы создали прокси для .load без причины. Вы также можете использовать объект XMLDOM напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...