我正在尝试调试以下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;
}
}
答案 0 :(得分:3)
我看到的一个直接问题是“构造函数”是一个全局变量。使用“var constructor = function ...”为其提供本地范围。
答案 1 :(得分:1)
这可能不是问题,但您可能希望使用 var 语句将构造变量设为本地。
var constructor = function() { ...
答案 2 :(得分:0)