定义良好的循环中的未定义变量

时间:2014-08-11 10:25:17

标签: javascript craftyjs

我想知道你是否可以直接对我进行一些javascript我有点困惑。代码结束了:http://jsfiddle.net/Lbd5k5zh/。逃避我的那段代码是:

[...]
// Locate this entity at the given position on the grid
  at: function(x, y) {
    if (x === undefined && y === undefined) {
      return { x: this.x/Game.map_grid.tile.width, y: this.y/Game.map_grid.tile.height }
    } else {...}
  }

例如,如果我在嵌套循环中:

for(x=0;x<24;x++):
  for(y=0;y<16;y++)

所以x,y显然已明确定义并生成类似的笛卡尔坐标:

(0,0) (1,0) (2,0)... (23,0)
(0,1) (1,1) (2,1)... (23,1)
(0,2) (1,2) (2,2)       .
.        .              .
.             .         .
.                  .    .
(0,14)(1,14)(2,14)
(0,15)(1,15)(2,15)...(23,15)

xy将如何变得未定义?而且,我不知道在哪里/如何

return { x: this.x/Game.map_grid.tile.width === this.x/16

this.x会被初始化吗?我意识到这是一个边缘案例,但很难想出一个可能会被使用的场景。

1 个答案:

答案 0 :(得分:3)

检查参数是否未定义的重点是为函数提供2种不同的行为(API)。

如果你调用obj.at()(没有参数,即函数的主体将参数看作undefined),则此函数充当getter:它返回当前坐标。

如果你打电话给obj.at(x,y),这个功能就像我看到的那样,更像是一个设定者(设定当前位置)。您的帖子中的代码就是这种情况。

以这种方式设计函数API是否良好实践是值得商榷的;你的困惑是支持号码的论据。