[英]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.