我陷入了代码的某些部分。我创建了类似于模型类BoardEx的东西,我想为它创建Iterator,这里有一些例子:
Game.BoardEx = function(params){
...
this.board = Array(cols, rows);
...
}
其中Game是所有孩子“类”的“父”对象。然后我宣布了Iterator:
Game.BoardEx.prototype.Iterator = function(){
var pos = {x: 0, y: -1};
this.next = function(){
...
return this.board[pos.x][pos.y];
};
以后的用法是:
var board = new Game.BoardEx();
var iter = new board.Iterator();
似乎我无法在此范围内调用this.board
。我应该使用bind
还是其他方法,或者我根本不能这样说?
答案 0 :(得分:2)
当您在this
电话中时,您无法访问调用对象的new
。
执行new
“构造”调用会将上下文更改为新创建的对象。
相反,您可以使用构建器函数:
Game.BoardEx.prototype.getIterator = function(){
function Iterator(board){
this.board = board;
this.pos = {x:0, y:-1};
}
Iterator.prototype.next = function(){
return this.board[this.pos.x][this.pos.y];
...
}
return new Iterator(this.board); // create new instance with the board.
}
只要getIterator函数将有效的板传递给它,您就可以完全在板外部定义Iterator
。这也可以让你从外面调用它,可能更有效。它也会使instanceof
起作用,但IMO真的不是什么大问题。