モダンJavaScript入門: クロージャー、プロトタイプ、this

目次

  1. はじめに
  2. クロージャー
  3. プロトタイプ
  4. this
  5. まとめ

1. はじめに

JavaScriptでは、クロージャー、プロトタイプ、thisといった概念が重要な役割を果たします。これらは初心者にとっては少々難易度が高いかもしれませんが、理解することにより、より高度なプログラミングが可能になります。この記事では、それぞれの概念について詳しく説明します。

2. クロージャ

クロージャーは、関数とその関数が作成されたレキシカルスコープの組み合わせです。これにより、関数はそれが定義されたスコープ外からでも自身が作成されたスコープにある変数にアクセスすることが可能になります。

例えば、次のコードでは、outer関数の中にinner関数が定義されています。inner関数は、outer関数のローカル変数xにアクセスしています。

function outer() {
  let x = 10;
  function inner() {
    console.log(x); // outer関数のxにアクセス
  }
  return inner;
}

let myFunc = outer();
myFunc(); // 10

3. プロトタイプ

JavaScriptはプロトタイプベースの言語です。すべてのオブジェクトは、メソッドとプロパティを継承するためのテンプレートとなるプロトタイプオブジェクトを持っています。

例えば、次のコードでは、PersonコンストラクタとPersonプロトタイプを定義しています。Personプロトタイプに定義されたgreetメソッドは、Personを通じて作成されたすべてのオブジェクトで利用できます。

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

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
}

let john = new Person("John");
john.greet(); // Hello, my name is John

4. this

JavaScriptでは、thisキーワードは、その関数が呼び出されるコンテキストによって値が変わります。thisは大まかに以下のような値を持つことがあります。

  • グローバルオブジェクト(関数外や非strictモードでの関数内)
  • 関数が呼び出されたオブジェクト(メソッド内)
  • 新しく生成されたインスタンス(コンストラクタ内)
  • callやapplyメソッドで指定したオブジェクト

例えば、次のコードでは、Personコンストラクタ内のthisは新しく生成されたインスタンスを指しています。

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

let john = new Person("John");
console.log(john.name); // John

5. まとめ

この記事では、JavaScriptクロージャー、プロトタイプ、thisといった高度な概念について解説しました。これらを理解することで、より深い理解と効果的なコード作成が可能になります。