カテゴリ: JavaScript 更新日: 2026/04/25

JavaScriptのthisの参照先を完全解説!初心者でもわかるthisのルール4つ

JavaScriptのthisの参照先を理解する4つのルール
JavaScriptのthisの参照先を理解する4つのルール

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptでよく出てくるthisって何ですか?どう使うんでしょう?」

先生

「thisは、今実行しているコードの中で『自分自身』が何を指すかを示すキーワードです。オブジェクトや関数の中で重要になります。」

生徒

「でも、関数の中とオブジェクトの中で違うって聞きました。どういうことですか?」

先生

「そうですね。thisが何を指すかは『4つのルール』で決まります。これを知ると、コードの動きがとてもわかりやすくなります。」

1. グローバルコンテキストではthisはwindow(ブラウザの場合)

1. グローバルコンテキストではthisはwindow(ブラウザの場合)
1. グローバルコンテキストではthisはwindow(ブラウザの場合)

JavaScriptで最初に書いたコードは、特別なオブジェクトの中にない限り、グローバルコンテキストで実行されます。この場合、thisはブラウザではwindowオブジェクトを指します。Node.jsの場合はglobalオブジェクトです。


console.log(this);

    // ブラウザではwindowオブジェクトが表示されます

つまり、グローバルで関数を呼び出すと、thisは全体のオブジェクトを指していることになります。

2. オブジェクトのメソッド内ではthisはそのオブジェクト

2. オブジェクトのメソッド内ではthisはそのオブジェクト
2. オブジェクトのメソッド内ではthisはそのオブジェクト

オブジェクトの中で関数を作ると、その関数を「メソッド」と呼びます。メソッドの中のthisは、そのオブジェクト自身を指します。


const user = {
  name: "太郎",
  greet: function() {
    console.log(this.name + "です。こんにちは!");
  }
};

user.greet(); // 太郎です。こんにちは!

この場合、this.nameuser.nameと同じ意味になります。

3. コンストラクタ関数やクラスではthisは新しく作ったオブジェクト

3. コンストラクタ関数やクラスではthisは新しく作ったオブジェクト
3. コンストラクタ関数やクラスではthisは新しく作ったオブジェクト

JavaScriptではnewキーワードを使って関数やクラスから新しいオブジェクトを作ることができます。その時のthisは、新しく作られたオブジェクトを指します。


function Person(name) {
  this.name = name;
}

const taro = new Person("太郎");
console.log(taro.name); // 太郎

ここでのthis.nameは、作られたtaroオブジェクトのnameプロパティを指しています。クラスでも同じです。


class PersonClass {
  constructor(name) {
    this.name = name;
  }
}

const hanako = new PersonClass("花子");
console.log(hanako.name); // 花子

4. call, apply, bindでthisを自由に指定できる

4. call, apply, bindでthisを自由に指定できる
4. call, apply, bindでthisを自由に指定できる

関数はcallapplybindを使うことで、thisを自由に指定できます。これは便利ですが、初心者は少し混乱しやすいポイントです。


function greet() {
  console.log(this.name + "さん、こんにちは!");
}

const user1 = { name: "太郎" };
const user2 = { name: "花子" };

greet.call(user1); // 太郎さん、こんにちは!
greet.apply(user2); // 花子さん、こんにちは!

const boundGreet = greet.bind(user1);
boundGreet(); // 太郎さん、こんにちは!

callapplyはすぐに関数を実行しますが、bindはthisを固定した新しい関数を作ります。

5. アロー関数ではthisは作られた場所の外側を参照

5. アロー関数ではthisは作られた場所の外側を参照
5. アロー関数ではthisは作られた場所の外側を参照

アロー関数は普通の関数と違い、自分でthisを持ちません。外側の関数やオブジェクトのthisをそのまま使います。


const user = {
  name: "太郎",
  greet: function() {
    const arrow = () => console.log(this.name + "です!");
    arrow();
  }
};

user.greet(); // 太郎です!

通常の関数だとthisはundefinedやwindowを指す場合がありますが、アロー関数では外側のthisをそのまま使うので安心です。

6. thisを理解するコツと初心者向けの考え方

6. thisを理解するコツと初心者向けの考え方
6. thisを理解するコツと初心者向けの考え方

初心者はthisを見ると難しく感じますが、まずは『今いる環境で何を指すか』を考えることが重要です。

  • グローバルではwindowやglobalを指す
  • オブジェクトのメソッドではそのオブジェクト自身を指す
  • コンストラクタやクラスではnewで作ったオブジェクトを指す
  • call, apply, bindで自由に指定できる
  • アロー関数では外側のthisをそのまま使う

こうしたルールを頭に入れておくと、JavaScriptの関数やオブジェクトを安心して扱えるようになります。


const globalFunc = function() {
  console.log(this);
};

globalFunc(); // ブラウザではwindow、Nodeではglobal

7. 実際の開発でのthisの活用例

7. 実際の開発でのthisの活用例
7. 実際の開発でのthisの活用例

例えば、ボタンを押したときにオブジェクトのデータを表示したい場合、thisをうまく使うとコードがすっきりします。


const buttonHandler = {
  text: "クリックされました",
  handleClick: function() {
    console.log(this.text);
  }
};

document.querySelector("button").addEventListener("click", buttonHandler.handleClick.bind(buttonHandler));

このようにbindを使うことで、ボタンがクリックされたときもthisを正しくオブジェクトに向けることができます。

8. まとめ的な考え方:thisは状況に応じて変わる自分

8. まとめ的な考え方:thisは状況に応じて変わる自分
8. まとめ的な考え方:thisは状況に応じて変わる自分

JavaScriptのthisは「自分がどのオブジェクトを指すか」を示す魔法のキーワードです。最初は混乱しますが、今回紹介した4つの基本ルールとアロー関数の特徴を意識すれば、初心者でもしっかり理解できます。練習として、いろいろな関数やオブジェクトでthisがどこを指すか確認すると、自然と使えるようになります。

まとめ

まとめ
まとめ

JavaScriptのthisは初心者にとって少し難しく感じるキーワードですが、基本ルールを押さえることでスッキリ理解できます。グローバルコンテキストではwindowglobalを指し、オブジェクトのメソッドではそのオブジェクト自身を参照します。コンストラクタ関数やクラスではnewで作成したオブジェクトを指し、callapplybindを使うことで任意のオブジェクトにthisを指定できます。また、アロー関数は自身のthisを持たず、外側のスコープのthisをそのまま利用するため、イベントハンドラやコールバックで便利です。実際の開発ではボタンやフォームなどのUIイベント、非同期処理、オブジェクト管理などさまざまな場面でthisを活用できます。これらを理解すると、関数の挙動やオブジェクト指向プログラミングのコードが読みやすくなり、保守性も向上します。

サンプルプログラムで振り返るthisの基本

基本的な使い方をサンプルで確認してみましょう。

 // グローバルコンテキストでのthis function globalFunc() { console.log(this); } globalFunc(); // ブラウザではwindow、Nodeではglobal
// オブジェクトのメソッドでのthis
const obj = {
name: "太郎",
greet: function() {
console.log(this.name + "です!");
}
};
obj.greet(); // 太郎です!

// コンストラクタ関数でのthis
function Person(name) {
this.name = name;
}
const hanako = new Person("花子");
console.log(hanako.name); // 花子

// call, apply, bindを使ったthis指定
function sayHello() {
console.log(this.name + "さん、こんにちは!");
}
const user = { name: "次郎" };
sayHello.call(user); // 次郎さん、こんにちは!
sayHello.apply(user); // 次郎さん、こんにちは!
const boundSayHello = sayHello.bind(user);
boundSayHello(); // 次郎さん、こんにちは!

// アロー関数で外側のthisを利用
const arrowObj = {
name: "三郎",
greet: function() {
const arrow = () => console.log(this.name + "です!");
arrow();
}
};
arrowObj.greet(); // 三郎です!
先生と生徒の振り返り会話

生徒

「先生、thisって最初は難しそうに見えましたけど、こうやって整理すると理解しやすいですね。」

先生

「そうですね。ポイントは『どの環境でthisを呼んでいるか』を意識することです。グローバル、オブジェクト、コンストラクタ、アロー関数、それぞれのルールを頭に入れておくと混乱しにくくなります。」

生徒

「bindやcall、applyも使い方が少しずつわかってきました。イベント処理でも便利ですね。」

先生

「その通りです。UIイベントやコールバックでthisを正しく指すように工夫すると、コードがすっきりします。アロー関数は特に便利で、外側のthisをそのまま使えるので覚えておくと良いでしょう。」

生徒

「練習として、いろいろな関数やオブジェクトでthisを確認してみます。そうすると自然に使いこなせるようになりますね。」

先生

「はい、その通りです。最初は混乱するかもしれませんが、繰り返し触ることでthisの挙動が体感として理解できるようになります。」

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptの関数に型をつける方法(引数・戻り値)を初心者向けに徹底解説!
New2
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
New3
TypeScript
TypeScriptでExpressのミドルウェアを型安全に定義する方法!バックエンド開発の初心者向け解説
New4
JavaScript
JavaScriptのfilterメソッドで条件に合う要素を抽出する方法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptでHTML5バリデーションAPIを使いこなす!初心者でもわかるフォーム入力チェック
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.4
Java&Spring記事人気No4
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptで要素を削除する方法(removeChild, removeなど)
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの現在日時を取得する方法を完全ガイド!初心者でもわかるDate.now()とnew Date()
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptでオブジェクト指向のカプセル化を学ぶ!初心者でもわかるクラスとプロパティの保護方法