Ошибка JavaScript "Член не найден" в IE8 - PullRequest
2 голосов
/ 23 марта 2010

Я пытаюсь отладить следующий блок кода Javascript, чтобы увидеть, в чем проблема. Я получаю сообщение об ошибке «Элемент не найден» в строке

constructor = function() {
в методе extend: function ().

Я не очень хорошо разбираюсь в Javascript, и я не писал этого, так что я немного заблудился в том, в чем проблема. Ошибка возникает только в IE8, она отлично работает в IE7 и Firefox.

var Class = {
  create: function() {
    return function() {
        if(this.destroy) Class.registerForDestruction(this);
          if(this.initialize) this.initialize.apply(this, arguments);
      }
  },

  extend: function(baseClassName) {
    constructor = function() {
        var i;

          this[baseClassName] = {}
        for(i in window[baseClassName].prototype) {
            if(!this[i]) this[i] = window[baseClassName].prototype[i];
            if(typeof window[baseClassName].prototype[i] == 'function') {
                this[baseClassName][i] = window[baseClassName].prototype[i].bind(this);
            }
        }

        if(window[baseClassName].getInheritedStuff) {
            window[baseClassName].getInheritedStuff.apply(this);
        }

        if(this.destroy) Class.registerForDestruction(this);
          if(this.initialize) this.initialize.apply(this, arguments);
    }

    constructor.getInheritedStuff = function() {
        this[baseClassName] = {}
        for(i in window[baseClassName].prototype) {
            if(!this[i]) this[i] = window[baseClassName].prototype[i];
            if(typeof window[baseClassName].prototype[i] == 'function') {
                this[baseClassName][i] = window[baseClassName].prototype[i].bind(this);
            }
        }

        if(window[baseClassName].getInheritedStuff) {
            window[baseClassName].getInheritedStuff.apply(this);
        }
    }

    return constructor;

  },

  objectsToDestroy : [],  
  registerForDestruction: function(obj) {
    if(!Class.addedDestructionLoader) {
            Event.observe(window, 'unload', Class.destroyAllObjects);
        Class.addedDestructionLoader = true;
    }
    Class.objectsToDestroy.push(obj);
  },

  destroyAllObjects: function() {
    var i,item;
    for(i=0;item=Class.objectsToDestroy[i];i++) {
        if(item.destroy) item.destroy();
    }
    Class.objectsToDestroy = null;
  }  
}

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Одна непосредственная проблема, которую я вижу, состоит в том, что «конструктор» является глобальной переменной. Используйте "var constructor = function ...", чтобы дать ему локальную область видимости.

1 голос
/ 23 марта 2010

Возможно, это не проблема, но вы, вероятно, захотите сделать construct переменную локальной, используя оператор var .

var constructor = function() { ...
0 голосов
/ 14 декабря 2010

У меня была такая же проблема. IE8 рассматривает переменную класса как метод и замораживает. Попробуйте переименовать его во что-то еще

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