Javascript变量范围和继承

时间:2014-06-05 13:59:13

标签: javascript oop variables inheritance scope

我陷入了代码的某些部分。我创建了类似于模型类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还是其他方法,或者我根本不能这样说?

1 个答案:

答案 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真的不是什么大问题。