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

JavaScriptのthisとは?初心者でもわかる基本概念と使い方解説

JavaScriptのthisとは?基本概念と仕組みを解説
JavaScriptのthisとは?基本概念と仕組みを解説

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

生徒

「先生、JavaScriptでよく見る this って何ですか?なんだか難しそうです。」

先生

this は、簡単に言うと『今操作している対象』を指すキーワードです。JavaScriptの関数やオブジェクトの中で、自分がどの対象に対して処理をしているのかを示す便利な仕組みです。」

生徒

「でも、どうやって判断しているんですか?」

先生

「それは、this がどこで呼ばれたか、どのスコープ(範囲)で使われているかによって変わります。これを理解すると、オブジェクト指向やイベント処理もスムーズに使えるようになります。」

1. thisの基本的な意味とは?

1. thisの基本的な意味とは?
1. thisの基本的な意味とは?

JavaScriptの this は、関数やオブジェクトの中で「自分自身を指す目印」のようなものです。たとえばオブジェクトのプロパティやメソッドを操作する際に、どのオブジェクトを操作しているかを指し示します。初心者でもよく出てくる概念なので、最初にしっかり覚えておくと便利です。

2. グローバルスコープでのthis

2. グローバルスコープでのthis
2. グローバルスコープでのthis

JavaScriptのグローバルスコープ(関数やオブジェクトの外側)で this を使うと、基本的に window オブジェクトを指します(ブラウザの場合)。


console.log(this); // ブラウザでは window オブジェクトを表示

この場合、this は「どのオブジェクトか?」と聞かれたら「グローバルの window」と答えればOKです。

3. オブジェクトの中でのthis

3. オブジェクトの中でのthis
3. オブジェクトの中でのthis

オブジェクトのメソッドの中で this を使うと、そのオブジェクト自身を指します。


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

user.greet(); // 太郎さん、こんにちは!

ここでは this.nameuser.name と同じ意味になるので、自分がどのオブジェクトに属しているかがわかります。

4. 関数の中でのthisの違い

4. 関数の中でのthisの違い
4. 関数の中でのthisの違い

関数単体で呼ばれた場合、this はグローバルオブジェクト(ブラウザでは window)を指します。注意が必要です。


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

showThis(); // window を表示(ブラウザの場合)

もし 'use strict' を使うと、thisundefined になります。

5. コンストラクタ関数とthis

5. コンストラクタ関数とthis
5. コンストラクタ関数とthis

JavaScriptのコンストラクタ関数で new を使うと、this は新しく作られたオブジェクトを指します。


function Person(name) {
  this.name = name;
  this.sayHello = function() {
    console.log(this.name + "です、よろしく!");
  };
}

const taro = new Person("太郎");
taro.sayHello(); // 太郎です、よろしく!

このように、new を使うと this は「作ったオブジェクト」を指すので、オブジェクトごとに異なる値を扱えます。

6. アロー関数とthisの特徴

6. アロー関数とthisの特徴
6. アロー関数とthisの特徴

アロー関数は普通の関数と違って、自分専用の this を持ちません。外側のスコープの this をそのまま使います。


const obj = {
  name: "花子",
  greet: () => {
    console.log(this.name);
  }
};

obj.greet(); // undefined (objではなく外側のthisを参照)

この性質を理解しておくと、イベントやコールバックで意図しない this の参照ミスを防げます。

7. thisを固定するbind, call, apply

7. thisを固定するbind, call, apply
7. thisを固定するbind, call, apply

JavaScriptでは bind, call, apply を使うと this を任意のオブジェクトに固定したり指定したりできます。


const person = { name: "次郎" };

function sayHi(greeting) {
  console.log(greeting + ", " + this.name);
}

const sayHiToJiro = sayHi.bind(person);
sayHiToJiro("こんにちは"); // こんにちは, 次郎

sayHi.call(person, "やあ"); // やあ, 次郎
sayHi.apply(person, ["こんばんは"]); // こんばんは, 次郎

こうすると、関数をどこで呼んでも this を指定したオブジェクトとして扱えます。

8. イベントハンドラーでのthis

8. イベントハンドラーでのthis
8. イベントハンドラーでのthis

ブラウザでイベントを扱うとき、this は基本的にイベントを発生させた要素を指します。


const button = document.querySelector("button");
button.addEventListener("click", function() {
  console.log(this); // クリックしたボタン要素
});

アロー関数を使うと、外側のスコープの this を参照してしまうので注意が必要です。

9. thisのまとめポイント

9. thisのまとめポイント
9. thisのまとめポイント

JavaScriptの this は、どのスコープで呼ばれたか、どの形式で関数を使うかによって変わります。基本を押さえると、オブジェクト操作やイベント処理、関数呼び出しの理解が格段に楽になります。

ポイントは以下の通りです。

  • グローバルスコープ:this = window(strictモードでは undefined)
  • オブジェクトメソッド:this = そのオブジェクト
  • 関数:通常はグローバルオブジェクト、strictモードでは undefined
  • コンストラクタ関数:this = new で作ったオブジェクト
  • アロー関数:自分専用の this は持たず、外側スコープを参照
  • bind/call/apply:任意のオブジェクトに this を固定可能

まとめ

まとめ
まとめ

ここまでJavaScriptの this について詳しく見てきました。this は「現在の実行コンテキストで指し示す対象」を表す重要なキーワードであり、関数やオブジェクトのスコープによって指すオブジェクトが変わります。グローバルスコープでは window(ブラウザ環境)を指し、オブジェクトのメソッド内ではそのオブジェクト自身を指すことが多いです。また、関数単体で呼び出した場合や 'use strict' を使用した場合には undefined となるなど、挙動が少し複雑です。コンストラクタ関数やクラスでは new によって生成される新しいオブジェクトを this が指し、アロー関数は自身の this を持たず、外側のスコープの this をそのまま参照するという特徴があります。さらに bind, call, apply を使えば、任意のオブジェクトに this を固定できるので、イベントハンドラーやコールバック関数でも意図通りに this を扱うことが可能です。これらの知識を活用することで、JavaScriptにおけるオブジェクト操作、イベント処理、関数呼び出しの理解がより深まり、コードの可読性と保守性が大きく向上します。

実際のサンプルコードでの振り返り

 // グローバルスコープ console.log(this); // window
// オブジェクトメソッド内
const obj = {
name: "太郎",
greet: function() {
console.log(this.name);
}
};
obj.greet(); // 太郎

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

// アロー関数
const arrowObj = {
name: "次郎",
greet: () => console.log(this.name)
};
arrowObj.greet(); // undefined(外側のthis)

// bind/call/apply
function sayHi(greeting) {
console.log(greeting + ", " + this.name);
}
const person = { name: "三郎" };
sayHi.bind(person)("こんにちは");
sayHi.call(person, "やあ");
sayHi.apply(person, ["こんばんは"]);
先生と生徒の振り返り会話

生徒

「先生、今日 this の色々な使い方を学んだけど、どんな時にどの this が使われるかまだ少し混乱します。」

先生

「大丈夫です。ポイントはスコープと関数の呼び出し方です。グローバルでは window、オブジェクトのメソッドではそのオブジェクト、コンストラクタでは新しいオブジェクト、アロー関数では外側のスコープ、そして bind/call/apply を使えば任意のオブジェクトに固定できる、これを覚えておけばOKです。」

生徒

「なるほど。アロー関数だけは少し特殊で、自分の this を持たないんですね。」

先生

「そうです。イベントやコールバックで意図しない this を参照しないように注意しましょう。慣れてくると自然にどの this が使われているかがわかるようになります。」

生徒

「今日のまとめは、スコープ、関数の呼び出し方、アロー関数、bind/call/apply の四つを押さえることですね!」

先生

「その通りです。これで JavaScript の 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の配列操作でよくあるエラーとその解決法まとめ