PR

【JavaScript】thisとは?意味と使い方を初心者向けにわかりやすく解説

JavaScriptのthisについて解説する記事のアイキャッチ画像 JavaScript

JavaScriptの this は、初心者がつまずきやすい代表的なテーマです。ですが、最初に結論だけ押さえるとかなり理解しやすくなります。this は「この関数が、どの相手を主語にして呼ばれたか」を表すキーワード です。

難しく感じるのは、this の意味が固定ではなく、関数の呼び出し方によって変わるからです。この記事では、オブジェクトのメソッド、普通の関数、アロー関数の順に整理して解説します。

ポイント this は「どこで書いたか」ではなく「どう呼び出したか」で決まる、と考えると整理しやすいです。

スポンサーリンク

結論: this は呼び出し方で決まります

場面this が指すもの
オブジェクトのメソッドとして呼ぶそのオブジェクト
普通の関数として呼ぶ環境によって異なる。strict mode やモジュールでは undefined になることが多い
アロー関数自分の this を持たず、外側の this を使う

まずはこの表だけ覚えておくと、細かい違いが見えてきたときにも迷いにくくなります。

1. オブジェクトのメソッドでは、そのオブジェクトを指します

いちばんわかりやすいのは、オブジェクトの中で使うパターンです。

const user = {
  name: "田中",
  greet: function() {
    console.log(this.name);
  }
};

user.greet(); // 田中

この場合、greetuser.greet() と呼ばれているので、thisuser を指します。だから this.nameuser.name と同じ意味になります。

初心者はここを基準にすると理解しやすいです。「オブジェクトのメソッドなら、そのオブジェクトが主語になる」 と覚えておきましょう。

2. 普通の関数として呼ぶと、思った相手を指さないことがあります

次に、オブジェクトと関係なく普通の関数として呼ぶケースです。

function showThis() {
  console.log(this);
}

showThis();

このときの this は、環境によって結果が変わります。ブラウザの古い書き方では window になることもありますが、strict mode や JavaScript モジュールでは undefined になることが多いです。

初心者のうちは、「普通の関数では、自分が期待するオブジェクトを自動では指さない」 と理解しておくと安全です。

3. アロー関数は自分専用の this を持ちません

アロー関数は、普通の関数とここが大きく違います。アロー関数は自分の this を新しく作らず、外側にある this をそのまま使います。

const user = {
  name: "田中",
  greet: () => {
    console.log(this.name);
  }
};

user.greet();

このコードでは、greetuser.greet() と呼んでいても、アロー関数の thisuser になりません。ここが初心者にとって大きな落とし穴です。

そのため、オブジェクトのメソッドを定義するときは、まず普通の function を使う と覚えるのがおすすめです。

4. this が役立つのは、同じオブジェクトの値をまとめて使いたいときです

this は、オブジェクトの中にある複数の値を使って処理したいときに便利です。

const cart = {
  price: 3000,
  taxRate: 0.1,
  getTotal: function() {
    return this.price * (1 + this.taxRate);
  }
};

console.log(cart.getTotal()); // 3300

このように書くと、cart の中にある値をまとめて扱えます。オブジェクトを部品として扱う場面では、とてもよく使う考え方です。

5. よくあるつまずき

メソッドを変数に入れると this が変わることがあります

const user = {
  name: "田中",
  greet: function() {
    console.log(this.name);
  }
};

const sayHello = user.greet;
sayHello();

この場合、sayHello() はもう user.greet() ではありません。つまり、thisuser を指さなくなります。

もし元のオブジェクトを保ったまま使いたいなら、bind を使う方法があります。

const sayHello = user.greet.bind(user);
sayHello(); // 田中

オブジェクトのメソッドにアロー関数を使うと混乱しやすいです

アロー関数は便利ですが、メソッド定義では this の動きが初心者にとってわかりにくくなります。まずは普通の function を使うほうが安全です。

this は変数名ではありません

this は自分で好きな値を入れる変数ではなく、「誰を主語にするか」を表す特別なキーワードです。letconst のような変数宣言とは別の概念です。

関連して読みたい記事

まとめ

まとめ this の基本

  • this は、関数がどの相手を主語にして呼ばれたかを表します。
  • オブジェクトのメソッドなら、そのオブジェクトを指します。
  • 普通の関数では、期待したオブジェクトを指さないことがあります。
  • アロー関数は自分専用の this を持たず、外側の this を使います。
  • メソッドを書くときは、まず普通の function を使うと理解しやすいです。

JavaScriptの this は、最初は抽象的に見えますが、「どう呼ばれたかで決まる」という軸を持てば整理しやすくなります。まずはオブジェクトのメソッドと普通の関数の違いから、落ち着いて確認していきましょう。

タイトルとURLをコピーしました