gpt4 book ai didi

Javascript变量范围和继承

转载 作者:行者123 更新时间:2023-11-30 17:26:57 28 4
gpt4 key购买 nike

我卡在了代码的某些部分。我创建了类似模型类 BoardEx 的东西,我想为它创建 Iterator,下面是一些示例:

Game.BoardEx = function(params){
...
this.board = Array(cols, rows);
...
}

其中 Game 是所有子“类”的“父”对象。然后我声明迭代器:

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 还是其他方法,还是根本不能调用它?

最佳答案

当您在 new 调用中时,您无法访问调用对象的 this

执行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.
}

您可以完全在 Board 外部定义 Iterator,只要 getIterator 函数将有效的 board 传递给它即可。这也可以让您从外部调用它并且可能更有效。它还将使 instanceof 工作,但在我看来这真的没什么大不了的。

关于Javascript变量范围和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24062244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com