Я пытаюсь использовать массив функций в объекте 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)
Так что кажется, что вызывается индексированная функция из моегомассив работает, но во время выполнения вызова функции он не распознает другую функцию-член того же класса.
Что я сделал не так?