2010-03-23 5 views
2

Я пытаюсь отладить следующий блок кода Javascript, чтобы узнать, в чем проблема. Я получаю сообщение об ошибке «Member not found» в строке Ошибка JavaScript в IE8

constructor = function() {
в расширении: 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

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

+0

Хорошо, что вы знаете, вот и все! Большое спасибо. – Steven

1

Это не может быть проблемой, но вы, вероятно, хотите, чтобы построить локальных переменные с помощью вара заявления.

var constructor = function() { ... 
0

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

+0

Не могли бы вы рассказать о своем ответе, указав пример кода или такой. Идет по пути заработка этого представителя и, наконец, принять решение по этому вопросу! –

Смежные вопросы