気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【JavaScript復習】プロトタイプ継承について

プロトタイプ継承

プロトタイプ継承の形式的な理解

// コンストラクタ名をクラス名と置き換え
クラス名.prototype.メソッド名 = function(メソッド引数) { メソッド本体 }

プロトタイプチェーン前提

  • すべての関数(オブジェクト)コンストラクタ*1はprototypeという名前のプロパティを持つ

  • すべてのオブジェクトは、オブジェクト生成に使ったコンストラクタのprototypeプロパティの参照先オブジェクトへの隠しリンクを持つ

  • すべてのオブジェクトは、「プロトタイプ」という参照リンクを持つ。内容としては、オブジェクト生成に使ったコンストラクタのprototypeプロパティの参照先オブジェクトである場合もあるが、絶対ではない*2

  • ECMAScript仕様書上の表記

    • prototypeプロパティ:explicit prototype property
      • 便宜上:prototype参照
    • prototypeプロパティの参照先オブジェクト:inplicit prototype link
      • 便宜上:暗黙リンク

プロトタイプチェーンの動作

オブジェクトのプロパティ読み込み順

  1. オブジェクト自身のプロパティ
  2. 暗黙リンクの参照オブジェクト(=コンストラクタのprototypeオブジェクト)のプロパティ
  3. 2のオブジェクトの暗黙リンクの参照オブジェクトのプロパティ
  4. 3の動作を探索が終わるまで続ける(探索の終端はObject.prototypeオブジェクト)

*1:2015/07/17 コメントをいただき、修正

*2:2015/07/17 コメントをいただき、修正・加筆