【发布时间】:2015-04-07 13:25:41
【问题描述】:
我有一个具有一些属性的对象。我想创建一个方法,如果数组的位置在范围内,则返回,但我不知道如何创建它。 (我正在尝试在 AngularJS 中制作扫雷,所以这段代码在 .factory 中)
我的代码如下:
var tableSquare = function(num_rows, num_bombs){
this.numRows = num_rows;
this.numBombs = num_bombs;
this.positions = new Array(numRows);
for (i = 0; i < numRows; i++) {
this.positions[i] = new Array(numRows);
}
};
现在我有一个工作函数 inRange(值必须是 >=0 并且
var inRange = function(i,j, range){
if (i>=0 && i<= range-1 && j>=0 && j<=range-1)
return true;
return false;
};
所以我可以查看我的数组的元素是否在范围内,我像这样使用它(numBombs 它是我在每个 tableSquare.positions 中插入的对象的属性):
if (inRange(i-1,j-1,this.numRows)) this.positions[i-1][j-1].numBombs += 1; //up left
我想要这样的方法:
tableSquare.prototype.inRange = function(){
//I don't know how to read here i and j
//in this.positions[i][j]
};
所以我可以使用这个函数制作:
if (this.positions[i-1][j-1].inRange()) this.positions[i-1][j-1].numBombs += 1;
如何创建这个 inRange 方法?谢谢;)
【问题讨论】:
-
您是否在这里过度使用了 OO?这个 tableSquare 需要做什么?您现有的 inRange 函数不是已经很好地检查了边界吗?
-
嗨 Adrian,inRange 工作正常,我正在尝试学习 AngularJS 和 OO Javascript。这就是为什么我想知道该怎么做。我正在学习创建这个扫雷器
-
但是即使你创建了一个 tableSquare 类,它的 inRange 函数也是多余的,因为如果你找到了一个 tableSquare 对象来敲击,那么显然你在范围内。
-
是的,但现在我使用 inRange 函数来获取拥有炸弹的人周围的所有方格。如果炸弹位于 [0][0] 位置,则上方或左侧没有正方形,因此我必须在访问其属性之前知道它们是否存在。现在我在 angular.factory 中使用 inRange,但我也需要验证控制器中的范围,所以如果它是类的方法,我不需要在控制器中复制 inRange 函数。在控制器中,当单击一个正方形时,我必须再次读取单击一个正方形周围的所有正方形。
-
您提出了一个不带参数的 inRange 方法。那只能说“this”是否在范围内,当然它是否存在。 getNeighbours() 方法怎么样?无论如何,您是认真地说角度不会让您调用全局函数吗?它会怎样阻止你?
标签: javascript arrays angularjs object methods