カテゴリ: JavaScript 更新日: 2025/08/28

JavaScriptのプロトタイプチェーンを理解しよう(オブジェクト継承の仕組み)初心者にもわかるやさしい解説

JavaScriptのプロトタイプチェーンを理解しよう(オブジェクト継承の仕組み)
JavaScriptのプロトタイプチェーンを理解しよう(オブジェクト継承の仕組み)

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

生徒

「JavaScriptのプロトタイプチェーンって何ですか?よく聞くけど難しそうで…」

先生

「プロトタイプチェーンは、JavaScriptのオブジェクトが『他のオブジェクトの機能を使える仕組み』のことです。難しく聞こえますが、簡単に言うと『お手本から性質を受け継ぐこと』なんですよ。」

生徒

「お手本から性質を受け継ぐ?それはどういう意味ですか?」

先生

「例え話を交えて説明しますね。まずは基本から見ていきましょう!」

1. プロトタイプチェーンとは?オブジェクトの継承の仕組み

1. プロトタイプチェーンとは?オブジェクトの継承の仕組み
1. プロトタイプチェーンとは?オブジェクトの継承の仕組み

JavaScriptのオブジェクトは、他のオブジェクトをお手本(プロトタイプ)として持つことができ、そのお手本が持っている性質や動作(プロパティやメソッド)を使うことができます。この仕組みをプロトタイプチェーンと言います。

このチェーンは、オブジェクトが持っていないものを順番に「親」のオブジェクトに探しにいくことを意味しています。

2. 例え話:プロトタイプチェーンはお手本を借りる仕組み

2. 例え話:プロトタイプチェーンはお手本を借りる仕組み
2. 例え話:プロトタイプチェーンはお手本を借りる仕組み

例えば、あなたが絵を描くときに、教科書の絵を参考にして描くとします。教科書の絵がプロトタイプで、あなたの絵がオブジェクトです。

もしあなたの絵に「色」がなければ、教科書の絵を見て「色」を使います。これがプロトタイプチェーンのイメージです。オブジェクトは自分になければ、プロトタイプをたどって探しにいくのです。

3. JavaScriptでプロトタイプチェーンを見る簡単な例

3. JavaScriptでプロトタイプチェーンを見る簡単な例
3. JavaScriptでプロトタイプチェーンを見る簡単な例

const animal = {
  eats: true,
  walk() {
    console.log("歩いています");
  }
};

const rabbit = {
  jumps: true,
};

rabbit.__proto__ = animal; // rabbitのプロトタイプをanimalに設定

console.log(rabbit.eats);  // true(rabbitには無いがanimalから継承)
rabbit.walk();             // 「歩いています」と表示
console.log(rabbit.jumps); // true(rabbit自身のプロパティ)

この例では、rabbitanimalをプロトタイプとして持ち、animalの性質や動作を使うことができます。

4. __proto__とは?プロトタイプを指す特別なプロパティ

4. __proto__とは?プロトタイプを指す特別なプロパティ
4. __proto__とは?プロトタイプを指す特別なプロパティ

__proto__はオブジェクトが持つ「このオブジェクトの親はどれか?」を示す特別なプロパティです。これによってプロトタイプチェーンができています。

ただし、__proto__は古い書き方で、通常はObject.getPrototypeOf()Object.setPrototypeOf()を使うことが推奨されています。

5. new演算子とプロトタイプチェーンの関係

5. new演算子とプロトタイプチェーンの関係
5. new演算子とプロトタイプチェーンの関係

JavaScriptでnew演算子を使うと、新しいオブジェクトが作られますが、そのオブジェクトは作った関数のプロトタイプを親として持ちます。


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

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

const taro = new Person("太郎");
taro.greet(); // 「こんにちは、太郎さん!」と表示

ここでtaroPerson.prototypeを親に持ち、greetメソッドを使えます。

6. プロトタイプチェーンがあるからできること

6. プロトタイプチェーンがあるからできること
6. プロトタイプチェーンがあるからできること
  • 同じ種類のオブジェクトで共通の機能を持たせることができる。
  • メモリを節約しながら便利な機能を共有できる。
  • オブジェクト同士で情報や動作を受け継ぐことができる(継承の仕組み)。

この仕組みはJavaScriptの基本的で重要な考え方なので、しっかり理解しましょう。

7. プロトタイプチェーンの確認方法

7. プロトタイプチェーンの確認方法
7. プロトタイプチェーンの確認方法

オブジェクトのプロトタイプを調べたいときは、Object.getPrototypeOf()を使います。


console.log(Object.getPrototypeOf(rabbit) === animal); // true

このように、どのオブジェクトを親に持っているか調べられます。

8. 注意点:プロトタイプチェーンは無限に続くわけではない

8. 注意点:プロトタイプチェーンは無限に続くわけではない
8. 注意点:プロトタイプチェーンは無限に続くわけではない

プロトタイプチェーンは最後に必ずnullという特別な値で終わります。nullは「これ以上親がいません」という意味です。


console.log(Object.getPrototypeOf(animal)); // nullでないなら更に親がいる

これで探し物をどこまでも続ける無限ループにならず、止まることができます。

9. プロトタイプチェーンのまとめポイント

9. プロトタイプチェーンのまとめポイント
9. プロトタイプチェーンのまとめポイント
  • JavaScriptのオブジェクトは他のオブジェクトを親にして性質や動作を共有できる。
  • この親をプロトタイプと呼び、それをたどる仕組みがプロトタイプチェーン。
  • newで作ったオブジェクトは作成関数のプロトタイプを親に持つ。
  • チェーンの最後はnullで終わる。
  • プロトタイプチェーンは継承の基礎であり、効率よく機能を共有できる。
関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScript × ES6の連携まとめ!安全でモダンなJavaScript開発の鍵
New2
TypeScript
TypeScriptの型システムとは?静的型付けのメリットと基本
New3
JavaScript
JavaScriptの正規表現で繰り返し指定(* + ? {n,m})を学ぼう
New4
TypeScript
TypeScriptとESNextの連携を完全ガイド!最新機能を使いこなす設定と対応法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの日時操作Tips!実務で役立つテクニック集
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでESLintとPrettierを導入!コード整形ルールを自動で統一する方法
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptのif文の使い方を完全ガイド!初心者でもわかる条件分岐
No.6
Java&Spring記事人気No6
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの正規表現で文字列を置換する方法(replaceメソッド)
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptで非同期イテレーター(for await of)を活用する