thisの意味、薄く分かるけどよく分からん。自ら使えない【Day29 of 100】

次から次へよく理解していない単語?用法?構文?が出てくる。

this

thisは単語の文字通りこの、である意味が含まれてAIに相談すると以下の回答が来る

このコードにおける `this` は、**「今、この関数(`game.draw`)を実行している主体である `game` オブジェクト自身」**を指しています。
なぜ `this` を使うのか、その意味と役割をわかりやすく解説します。
---
### 1. `this` は「自分自身」を指す代名詞
`game.draw` という関数は `game` オブジェクトの中に作られています。
そのため、関数の中で `this` と書くと、**「わざわざ `game.ctx` と書かなくても、自分のところにある `ctx` を使ってね」**という意味になります。
---
### 2. もし `this` を使わなかったら?
もし `this` を使わずに書くなら、以下のようになります。
```javascript
const 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;

と書いちゃうだろうな、、、。

でも、まず読めることが重要

っと割り切ってここは学習を進めようと思う、、、。


コメントを残す