繁体   English   中英

将对象传递给函数。 JavaScript

[英]Passing an object to function. JavaScript

游戏我创建了以下“类”:

function State(){
    this.board = [];
    for (i=0; i< 9; i++){
      var row = [];
      for (j=0; j< 9; j++){
        row.push(0);
      }
      this.board.push(row);
    }  
}

它有一个名为 nextEmptyCell 的方法:

State.prototype.nextEmptyCell = function(){
  ...
}

我创建了这个类的一个实例并将它传递给另一个函数。

game = new State();
function solveSudoku(game){
    var next = game.nextEmptyCell();
    ...
} 

在下一行: var next = game.nextEmptyCell(); 我收到一条错误消息:

“未捕获的类型错误:无法读取未定义的属性‘nextEmptyCell’”。

我不明白为什么“游戏”未定义以及如何解决此错误。 完整代码链接:jsfiddle.net/py6kv7ps/5

PS 有没有更好的方法将 JS 用作 OOP?

问题来自solveSudoku() ,您在不传递参数的情况下递归调用它。 这就是为什么你会出错。

“未捕获的类型错误:无法读取未定义的属性‘nextEmptyCell’”。

function solveSudoku(game) {  
      if (solveSudoku(ADD game OBJECT HERE)) {
        return game;
      }
}

您可能指的是game.nextEmptyCell() ,而不是state.nextEmptyCell() 您发布的代码中的任何地方都没有名为state变量。

这是因为您的参数game掩盖了同名的 glbal 变量game 全局变量game = new State(); 有正确的值。 因此,您可以将其传递给您的方法调用,以在方法solveSudoku()使用正确的游戏值

 function State(){ this.board = []; for (i=0; i< 9; i++){ var row = []; for (j=0; j< 9; j++){ row.push(0); } this.board.push(row); } } State.prototype.nextEmptyCell = function(){ console.log('egvse gtrs'); document.write('egvse gtrs'); }; var game = new State(); function solveSudoku(game){ var next = game.nextEmptyCell(); } solveSudoku(game);

暂无
暂无

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

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