3
我正在做一個簡單的JavaScript生命實現來試驗JavaScript 1.8的新功能,並且我使用此代碼得到了「InternalError:太多遞歸」,並且世界大小爲300 × 300:InternalError:遞歸太多
function LifeWorld(hDim, vDim) {
var data = let(that = this) Array.make(hDim, function(x) Array.make(vDim, function(y) new LifeCell(that, x, y)));
this.item = function(x, y) {
return (data[x] && data[x][y]) || null;
};
this.draw = function(g) {
g.fillRect(0, 0, this.scale, this.scale);
};
this.scale = 5;
this.offsetX = 0;
this.offsetY = 0;
// Finally, initialize all the cells and let them recognize their neighbours:
try {
for(let i = 0; i < ARRAY_SIZE * ARRAY_SIZE; i++) {
this.item(i/ARRAY_SIZE | 0, i % ARRAY_SIZE).init();
}
} catch(e) {
alert(e);
}
}
function LifeCell(world, x, y) {
var ul, u, ur,
l, r,
bl, b, br;
Object.defineProperties(this, {
world: {
get: function() {
return this.world;
}
},
x: {
get: function() {
return this.x;
}
},
y: {
get: function() {
return this.y;
}
}
});
this.init = function() {
alert('Init ' + x + ', ' + y);
[ul, u, ur,
l, r,
bl, b, br] = [world.item(this.x - 1, this.y - 1), world.item(this.x, this.y - 1), world.item(this.x + 1, this.y - 1),
world.item(this.x - 1, this.y), world.item(this.x, this.y), world.item(this.x + 1, this.y),
world.item(this.x - 1, this.y + 1), world.item(this.x, this.y + 1), world.item(this.x + 1, this.y + 1)];
delete this.init;
};
}
我得到一個警報,「初始化0,0」,所以在初始化之前一切正常,但後來我得到的異常信息。看起來它必須與world.item
有關,但我不知道如何返回一些東西。
我無法使用Firebug進行調試,因爲這段代碼顯然會使Firefox崩潰。任何人都可以弄清楚這裏有什麼問題嗎?
發現了這一點已經喜歡5秒我張貼的問題後。哎呀。哦,我會接受這個。 – Ryan