开发者

Javascript "Member not found" error in IE8

开发者 https://www.devze.com 2022-12-24 02:08 出处:网络
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

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

精彩评论

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

关注公众号