无法读取由变量引起的undefined属性

时间:2015-03-02 05:39:32

标签: javascript

我有一个名为' map.curCellMap'的二维数组。存储1&0和#0。我正在使用函数' cells.getNeighbourCount' (下图)引用此地图中的单元格。

在< cell.update'范围内。 function(下面)这是返回一个未定义的错误。在Firefox中,它读取' TypeError:map.curCellMap [nextY]未定义'。但是,如果我打电话给' cells.getNeighbourCount'使用硬编码值,它确实有效。

是什么给出了?

    var cells = {

        getNeighbourCount: function(x, y) {
            /*
            /* [y][x]
            /* Start a top and move clockwise
            */
            var neighbours = [[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1]],
                count = 0;

            for(i = 0; i < neighbours.length; i++) {
                var curNeighbour = neighbours[i];
                //Skip this iteration if neighbour is out of bounds
                if((y + curNeighbour[0] < 0) || (y + curNeighbour[0] > ROWS) || (x + curNeighbour[1] < 0) || (x + curNeighbour[1] > COLS)) {
                    continue;
                }
                var nextY = y+curNeighbour[0],
                    nextX = x+curNeighbour[1];

                if(map.curCellMap[nextY][nextX] == 1) {
                    count++;
                }

            }

            return count;
        },

        update: function() {
            for(y = 0; y < ROWS; y++) {
                for(x = 0; x < COLS; x++) {
                    var numNeighbours = this.getNeighbourCount(x, y),
                        newCellState;

                    if(numNeighbours >= 2 && numNeighbours <= 3) {
                        newCellState = 1;
                    } else {
                        newCellState = 0;
                    }

                    map.nextCellMap[y][x] = newCellState;
                }
            }

            map.curCellMap = map.nextCellMap;
        }
    }


    var map = {
        curCellMap: null,
        nextCellMap: null,

        //Map functions
        init: function() {
            this.curCellMap = this.generateRandomMap(0.05);
            this.nextCellMap = this.curCellMap;
        },

        generateRandomMap: function(density) {
            /*
            /* Generates a random cell map
            /* density = 0.00 -> No live cells, density = 1.00 -> All cells live
            */

            var map = helpers.create2DArray(ROWS, COLS);

            for(y = 0; y < ROWS; y++) {
                for(x = 0; x < COLS; x++) {
                    var rand = helpers.getRandomNum(0, 1);
                    map[y][x] = (rand <= density) ? 1 : 0;
                }
            }
            return map;
        }
    }

1 个答案:

答案 0 :(得分:0)

问题是

if((y + curNeighbour[0] < 0) || (y + curNeighbour[0] > ROWS) || (x + curNeighbour[1] < 0) || (x + curNeighbour[1] > COLS)) {

需要阅读

if((y + curNeighbour[0] < 0) || (y + curNeighbour[0] > ROWS-1) || (x + curNeighbour[1] < 0) || (x + curNeighbour[1] > COLS-1)) {

OOPS!