我有一个用于规划橱柜的基于javascript的规划器应用程序。在移动视图中,我实际上收到了此错误:
未捕获的RangeError:超出了最大调用堆栈大小
导致此错误的函数如下:
XMLClass.prototype.get = function(varName, thisObject) {
if (this[varName] instanceof Function) {
return (this[varName]).apply(thisObject);
} else if (this.hasOwnProperty(varName)) {
return this[varName];
} else if (this.parent) {
return this.parent.get(varName);
} else {
return false;
}
};
这是一个帮助程序功能,在创建文章菜单时使用。该错误是由此函数本身引起的,还是由为菜单提供数据的XML文件引起的?
有人可以帮我解决这个问题吗?那真是太棒了! 预先感谢!
编辑:
在这里调用该方法:
MobileCabinetMode.prototype.getAlternativeArticle = function(article) {
if (!(article instanceof Article)) return false;
depthAlternative = article.getAlternative("depth", DEFAULT_DEPTH);
if (depthAlternative) {
return depthAlternative;
}
var widths = article.getAllAlternative('width');
for (var i = 0; i < widths.length; i++) {
var alternative = planner.artNoArtList[widths[i].artnr];
if (!alternative.fitsAttribute("depth", DEFAULT_DEPTH)) {
alternative = this.getAlternativeArticle(alternative.getAllAlternative("depth", DEFAULT_DEPTH));
} else if (alternative !== article) {
alternative = this.getAlternativeArticle(alternative);
}
if (alternative instanceof Article && alternative.fitsAttribute('depth', DEFAULT_DEPTH) && alternative.isActive()) {
return alternative;
}
}
return false;
};
关键点在第13行:
alternative = this.getAlternativeArticle(alternative);
您是否有足够的信息?
答案 0 :(得分:0)
至少我得到了此代码创建者的答案。最后,我必须用一个本身已经存在(在另一个文件中)的较新版本替换我在原始帖子中提到的功能“ getAlternativeArticle”。 要查看差异,可以在这里查看结果:
MobileCabinetMode.prototype.getAlternativeArticle = function(article) {
// TODO: remove
if (~this.alternativeSearch.indexOf(article.artnr)) {
return false;
}
if (!(article instanceof Article)) return false;
this.alternativeSearch.push(article.artnr);
depthAlternative = article.getAlternative("depth", DEFAULT_DEPTH);
if (depthAlternative) {
this.alternativeSearch = [];
return depthAlternative;
}
var widths = article.getAllAlternative('width');
for (var i = 0; i < widths.length; ++i) {
var artnr = widths[i].artnr;
var alternative = planner.artNoArtList[artnr];
if (!alternative.fitsAttribute("depth", DEFAULT_DEPTH)) {
alternative = this.getAlternativeArticle(alternative.getAllAlternative("depth", DEFAULT_DEPTH));
} else if (alternative !== article) {
alternative = this.getAlternativeArticle(alternative);
}
if (alternative instanceof Article && alternative.fitsAttribute('depth', DEFAULT_DEPTH) && alternative.isActive()) {
this.alternativeSearch = [];
return alternative;
}
}
return false;
};
但是,我仍然要感谢您的答复和帮助!