1

少し混乱している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初期化されますか?エッジケースであることは認識していますが、使用できるシナリオを思いつくのに苦労しています。

4

1 に答える 1

3

引数が未定義かどうかをチェックするポイントは、関数に 2 つの異なる動作 (API) を与えることです。

を呼び出した場合obj.at()(引数なし。つまり、関数の本体は引数を としてundefined認識します)、この関数は getter として機能し、現在の座標を返します。

を呼び出すとobj.at(x,y)、この関数はセッターとして機能します (現在の位置を設定します)。これは、投稿のコードの場合です。

関数 API をそのように設計することが良い習慣であるかどうかは議論の余地があります。あなたの混乱は、いいえを支持する議論です。

于 2014-08-11T10:34:49.323 に答える