繁体   English   中英

Javascript未定义函数错误

[英]Javascript Undefined function error

我正在用JavaScript构建Conway的生活游戏。 先前的问题已修复。 ................................................... ......................现在说的是:无法读取'for(var i = 0; i <this.checkneighbours.com'中未定义的属性'length'。长度; i ++)'。 但是我在顶部将检查邻居定义为一个数组。 你知道这是什么问题吗?

//object constructor
function cell(){
    this.alive = Math.random() > 0.7;   
    this.neighbours = 0;  //number of live neighbours
    this.checkneighbours = [[-1,-1],[-1,0],[0,-1],[-1,1],[1,-1],[1,0],[0,1],[1,1]];
}


function GoL(size){
    this.size = size;
    this.grid = this.makeGrid(size);
};      

GoL.prototype.makeGrid = function(size){
    var grid = [];
    for(var i=0; i<size; i++){
        var row=[];
        for(var j =0; j<size; j++){
            row.push(new cell());   
        }
        grid.push(row);
    }
    return grid;
};  

GoL.prototype.drawGrid = function(){
    for(var i=0;i<this.size;i++){
        var row =this.grid[i];
        var rowCell="";
        for(var j=0;j<this.size;j++){
            var cell = row[j];
            if(cell.alive){
                rowCell += "X|";
            }else{
                rowCell += " |";
            }               
        }
        console.log(rowCell);
    }       
};  

GoL.prototype.underpopulation = function(ro,col){
    var cell = this.grid[ro][col];
    if(cell.neighbours <2){
        return true;
    }else{
        return false;   
    }
};  
GoL.prototype.overpopulation = function(ro,col){
    var cell = this.grid[ro][col];
    if(cell.neighbours >3){
        return true;
    }else{
        return false;   
    }
};  

GoL.prototype.backtolife = function(ro,col){
    var cell = this.grid[ro][col];
    if(cell.neighbours ===3 && !cell.alive){
        return true;
    }else{
        return false;   
    }   
};

GoL.prototype.update = function(ro,col){    
    var cell = this.grid[ro][col];
    cell.num_of_neighbours = 0;
    for(var i =0; i<this.checkneighbours.length; i++){
        var checkneighbour = this.checkneighbours[i];
        var neighbour1 = direction[0];
        var neighbour2 = direction[1];
        if(neighbour1>=0 && neighbour1 < this.size && neighbour2 >=0 && neighbour2 < this.size){
            var currentneighbour = this.grid[ro + neighbour1][col+neighbour2];
            if(currentneighbour.alive){
                cell.num_of_neighbours++;
            }
        }
    }
};

GoL.prototype.updateAll = function(){
    for(var i=0; i<this.size;i++){
        for(var j=0; j<this.size;j++){
            this.update(i,j);
        }
    }   
}

GoL.prototype.cellstatus = function(ro,col){
    var cell = this.grid[ro][col];
    if(this.underpopulation(ro,col) || this.overpopulation(ro,col)){
        cell.alive = false;
    }else if(this.backtolife(ro,col)){
        cell.alive = true;
    }
};

GoL.prototype.allcellstatus = function(ro,col){
    for(var i=0; i<this.size;i++){
        for(var j=0; j<this.size;j++){
            this.cellstatus(i,j);
        }
    }   
};


var gameoflife = new GoL(40);   

var interval = setInterval(function(){
    GoL.drawGrid();
    GoL.updateAll();
    GoL.allcellstatus();
},200); 

我想你的意思是

var gameoflife = new GoL(40);
var interval = setInterval(function(){
    gameoflife.drawGrid();
    gameoflife.updateAll();
    gameoflife.allcellstatus();
},200);

您应该使用以下语法来调用函数:

var gameoflife = new GoL(40);   

var interval = setInterval(function(){
    gameoflife.drawGrid();
    gameoflife.updateAll();
    gameoflife.allcellstatus();
},200);

您在类上调用方法drawGrid ,而不是实例gameoflife

您需要在实例上调用这些方法,而不是类本身:

var interval = setInterval(function(){
    gameoflife.drawGrid();
    gameoflife.updateAll();
    gameoflife.allcellstatus();
},200); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM