JavaScriptのプロトタイプ継承について

■ 目次

  1. 概要
  2. プロトタイプ継承について
  3. 参考

■ 概要

JavaScriptのプロトタイプ継承についてのまとめ
自分なりのメモなのであしからず

JavaScript勉強シリーズ

■ プロトタイプ継承について

JavaScriptにはクラスを作る機能は用意されていない
(ECMAScript 6でclass構文が追加されたみたいだがブラウザの対応状況がまだまだみたい)

しかしJavaScriptにはオブジェクトの継承に関する概念がある
感覚としては親オブジェクトのプロパティを子オブジェクトのプロパティが継承するってことで
子オブジェクトではそのプロパティについて書いてないが親オブジェクトで書いてあるのでそれを継承して使えちゃうという話
プロトタイプ継承の例

// JavaScriptにはクラスというものがないが
// クラス相当のものは作成できるので便宜上クラスと呼ぶ

// クラス定義相当
function TestClass(x) {
  this.x = x;
}
MyClass.prototype.show = function() {
  print(this.x);
}

// 上記のインスタンス生成 (コンストラクタ呼び出し)
var obj = new TestClass(5);
// メソッド呼び出し
obj.show();  // 5

showは直接のプロパティでないがメソッド呼び出しができる
-> 他のオブジェクト(prototypeオブジェクト)のプロパティを継承している

全ての関数オブジェクトはprototypeというプロパティを保持している

// 関数オブジェクトがprototypeプロパティを持っていることを調べる

var a = {}
typeof a;            // object
typeof a.prototype;  // undefined
Object.getOwnPropertyNames(a); // 出力なし

var a = function(){return 0;}
typeof a;           // function
typeof a.prototype; // object
Object.getOwnPropertyNames(a); // arguments,caller,length,name,prototype

Object.getOwnPropertyNames :オブジェクト自身が持っているプロパティの名前一覧

関数オブジェクトを定義した直後ではprototypeプロパティには
何もプロパティを持たないオブジェクトを参照している
開発者は別のオブジェクトを代入したり新しいプロパティを設定することが可能
そして関数オブジェクトをコンストラクタとして生成したオブジェクトは、コンストラクタのprototypeプロパティに代入されているオブジェクトに対して暗黙の参照を持っている

■ 参考


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です