
次から次へよく理解していない単語?用法?構文?が出てくる。
this
thisは単語の文字通りこの、である意味が含まれてAIに相談すると以下の回答が来る
このコードにおける `this` は、**「今、この関数(`game.draw`)を実行している主体である `game` オブジェクト自身」**を指しています。なぜ `this` を使うのか、その意味と役割をわかりやすく解説します。---### 1. `this` は「自分自身」を指す代名詞`game.draw` という関数は `game` オブジェクトの中に作られています。そのため、関数の中で `this` と書くと、**「わざわざ `game.ctx` と書かなくても、自分のところにある `ctx` を使ってね」**という意味になります。---### 2. もし `this` を使わなかったら?もし `this` を使わずに書くなら、以下のようになります。```javascriptconst ctx = game.ctx; // 直接オブジェクト名を書く```これでも動きますが、`this` を使うのには**2つの大きなメリット**があります。#### ① 名前の変更に強いもし後からオブジェクトの名前を `game` から `myApp` に変えたくなったとき、`this` を使っていれば中身のコードを書き直す必要がありません。#### ② 汎用性が高いリバーシのコードのように、複数の場所で同じような仕組み(初期化など)を使い回す場合、`this` を使っておけば「実行した瞬間の主役」に自動的に切り替わってくれるので、コードがスマートになります。---### 3. このコードでの実態今回のケースでは、`main.js` の中で以下のような構造になっています。* **場所**: `game` というオブジェクトの中。* **中身**: `game.init` の中で、`this.ctx = canvas.getContext('2d')` として「筆(ctx)」を自分自身に保存しています。* **呼び出し**: `game.draw()` が呼ばれたとき、`this.ctx` は **「さっき自分が保存したあの筆」** を取り出していることになります。---### まとめ:この一行の意味`const ctx = this.ctx;` は、> **「この game オブジェクトが持っている `ctx` というプロパティ(筆)を、この関数内で使いやすいように `ctx` という名前の変数にコピーして準備するよ」**という作業をしています。これによって、その後の描画命令(`ctx.fillRect` など)で、いちいち `this.ctx.fillRect` と書かずに済むようになり、コードがスッキリします。### 次のステップへの提案この `this` の仕組みがわかると、自作ゲームの機能を `game.update` や `game.reset` といった形でどんどん増やしていけるようになります。次は、プレイヤーの移動制限(画面外に出ないようにする処理)などを追加してみますか?
ということでなんとなく理解はしたけど今のレベルだとthisと自分から書くことはなさそう。
普通に考えたらやっぱり
const ctx = this.ctx;
とは書かずに
const ctx = game.ctx;
と書いちゃうだろうな、、、。
でも、まず読めることが重要
っと割り切ってここは学習を進めようと思う、、、。
コメントを残す