从函数指针到另一个成员函数的函数调用给出“未捕获的TypeError:不是函数”

时间:2019-06-23 06:02:55

标签: javascript function-pointers

我正在尝试在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)

因此似乎从我的数组中调用了索引函数正在工作,但是在函数调用运行时期间,它无法识别同一类的另一个成员函数。

我做错了什么?

0 个答案:

没有答案