我想知道你是否可以直接对我进行一些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)
x
或y
将如何变得未定义?而且,我不知道在哪里/如何
return { x: this.x/Game.map_grid.tile.width === this.x/16
this.x
会被初始化吗?我意识到这是一个边缘案例,但很难想出一个可能会被使用的场景。
答案 0 :(得分:3)
检查参数是否未定义的重点是为函数提供2种不同的行为(API)。
如果你调用obj.at()
(没有参数,即函数的主体将参数看作undefined
),则此函数充当getter:它返回当前坐标。
如果你打电话给obj.at(x,y)
,这个功能就像我看到的那样,更像是一个设定者(设定当前位置)。您的帖子中的代码就是这种情况。
以这种方式设计函数API是否良好实践是值得商榷的;你的困惑是支持号码的论据。