Вызов функции из указателя функции в другую функцию-член дает «Uncaught TypeError: не является функцией» - PullRequest
1 голос
/ 23 июня 2019

Я пытаюсь использовать массив функций в объекте 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)

Так что кажется, что вызывается индексированная функция из моегомассив работает, но во время выполнения вызова функции он не распознает другую функцию-член того же класса.

Что я сделал не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...