JavaScriptのアロー関数内で「this」キーワードにアクセスする方法を解説
JavaScriptにおけるthisキーワードは、それが属するオブジェクトを参照します。しかし、アロー関数の中では、thisはグローバルオブジェクト(ブラウザ環境では window)を指すという特別な挙動を持ちます。
通常の関数では、呼び出し方によって this が undefined になるケースがありますが、アロー関数の場合は定義されたスコープの this をそのまま引き継ぐため、常に正確な値を参照できるのが大きな特徴です。
アロー関数における「this」の基本概念
アロー関数には自身の this を持たないという重要な仕様があります。代わりに、外側の関数やスコープから this の値をレキシカルに引き継ぎます。これにより、コールバック関数内で this の参照が切れてしまう問題を回避できます。
サンプルコード
<html>
<body>
<script>
function Student(fname, grade) {
this.fname = fname;
this.grade = grade;
this.details = function() {
return () => {
document.write(`Hi, I'm ${this.fname} from ${this.grade} grade`);
};
}
}
let info = new Student('picaso', 'seventh');
let printInfo = info.details();
printInfo();
</script>
</body>
</html>このコードでは、Student コンストラクタ内の details メソッドが、内部でアロー関数を返しています。通常の関数であれば、この返された関数を実行した際に this の参照が失われますが、アロー関数は外側の details メソッドの this(つまり Student インスタンス)を自動的に引き継ぎます。
実行結果
Hi, I'm picaso from seventh grade
このように、アロー関数を使うことで、メソッドから返されたコールバック関数の中でも、元のオブジェクトのプロパティ(fname や grade)に正しくアクセスできていることが分かります。
まとめ:アロー関数とthisのポイント
- アロー関数は自分自身の this を持たない
- 外側のスコープの this をレキシカルに引き継ぐ
- コールバック関数内でもオブジェクトのコンテキストが保持される
- call / apply / bind で this を変更することはできない
この性質を理解しておくと、イベントハンドラや非同期処理のコールバックなどで this 参照のトラブルを防ぐことができます。特にオブジェクト指向的なコード設計において、アロー関数は this の問題を解決する強力な手段となります。
-
JavaScriptでプロパティにアクセスする3つの方法|ドット記法・角括弧・分割代入の使い分け
JavaScriptでオブジェクトのプロパティにアクセスする3つの方法 JavaScriptには、オブジェクトが持つプロパティ(キーと値のペア)を参照するための方法が主に3つあります。どれも同じ値を取得できますが、それぞれ特徴や向いている場面が異なるため、正しく使い分けられるとコードの可読性と保守性が大きく向上します。 ドット記法:object.property 角括弧記法:object[property] 分割代入:let {property} = object 1. ドット記法(object.property) 最もシンプルで読みやすい記法です。obj.a のようにピリオドでつなぐだけ
-
JavaScriptの簡潔なアロー関数の書き方と実装例
簡潔なアロー関数とは JavaScriptにおける簡潔な(コンサイス)アロー関数の構文は、次のようになります。 (param1, param2) => param1 + param2 この形式には function キーワードがなく、波括弧 {} で囲まれた関数本体もありません。パラメータと関数本体の間に => を置くだけで成立します。 さらに、パラメータが1つだけの場合は、丸括弧を省略して次のように書くこともできます。 param1 => param1 * 2 主な特徴 functionキーワード不要: 通常の関数宣言よりも短く記述できます。 暗黙のリターン: =>