我正在尝试在JavaScript对象中使用函数数组来轻松显示迷宫。但是我从函数数组中的调用给出了“ Uncaught TypeError:不是函数”。我该如何解决这个问题?
这是我要在我的javascript应用程序中尝试做的事情,很简单:
var cells = [
[4, 6, 14, 14, 12],
[3, 0, 11, 10, 11],
[14, 6, 14, 14, 10],
[4, 3, 2, 14, 12],
[4, 6, 5, 14, 7],
[4, 6, 14, 8, 12]
];
var m = new Maze();
m.draw(cells);
基本上,我想为我的Maze对象提供一个带有单元代码的二维数组,它应该在屏幕上绘制这些单元。这是我的类实现:
function Maze() {
this.ctx = canvas.getContext('2d');
// array of functions
this.draw_cells = [
this.draw_cell_0,
this.draw_cell_1,
this.draw_cell_2,
this.draw_cell_3,
this.draw_cell_4,
this.draw_cell_5,
this.draw_cell_6,
this.draw_cell_7,
this.draw_cell_8,
this.draw_cell_9,
this.draw_cell_10,
this.draw_cell_11,
this.draw_cell_12,
this.draw_cell_13,
this.draw_cell_14,
this.draw_cell_15
];
}
Maze.prototype.draw_background = function(col, row) {
this.ctx.fillRect(...);
};
Maze.prototype.draw_cell_0 = function(col, row) {
this.draw_background(col, row);
...
};
...
Maze.prototype.draw_cell_15 = function(col, row) {
this.draw_background(col, row);
...
};
Maze.prototype.draw = function(cells) {
for (var row=0; row < cells.length; row++) {
var rowCells = cells[row];
for (var col = 0; col < rowCells.length; col++) {
var cellCode = rowCells[col];
this.draw_cells[cellCode](col, row);
}
}
};
因此,我的类有一个变量,其中包含一个函数数组,每个函数均基于其代号指向draw_cell方法。我可以绘制16种不同类型的单元格。每个draw_cell _ ###函数还调用一个通用的draw_background函数。
但是,当我在浏览器中运行它时,它会给出:
Uncaught TypeError: this.draw_background is not a function
at Array.Maze.draw_cell_4 (maze.js:110)
at Maze.draw (maze.js:220)
at init (test.html:28)
at onload (test.html:106)
因此似乎从我的数组中调用了索引函数正在工作,但是在函数调用运行时期间,它无法识别同一类的另一个成员函数。
我做错了什么?