IE8中的“会员未找到”错误

时间:2010-03-23 15:17:05

标签: javascript internet-explorer-8

我正在尝试调试以下Javascript代码块以查看问题所在。我在extend:function()方法的行

constructor = 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 个答案:

答案 0 :(得分:3)

我看到的一个直接问题是“构造函数”是一个全局变量。使用“var constructor = function ...”为其提供本地范围。

答案 1 :(得分:1)

这可能不是问题,但您可能希望使用 var 语句将构造变量设为本地。

var constructor = function() { ...

答案 2 :(得分:0)

我有同样的问题。 IE8将'class'变量视为一种方法并冻结。尝试将其重命名为其他内容