开发者

Javascript "Member not found" error in IE8

I'm trying to debug the following block of Javascript code to see what the issue is. I'm getting an error that says "Member not found" on the line

constructor = function() {
in the extend:function() method.

I'm not very good with Javascript, and I didn't write this, so I'm kind of lost on what the issue is. The error only occurs in IE8, it works fine in IE7 and 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;
  }  
}


One immediate problem I see is that "constructor" is a global variable. Use "var constructor = function..." to give it local scope.


This may not be the issue, but you probably want to make construct variable local by using var statement.

var constructor = function() { ...


i had the same problem. IE8 treats 'class' variable as a method and freeze. Try to rename it to something else

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜