概要
JavaScriptのプロトタイプ継承についてのまとめ
自分なりのメモなのであしからず
JavaScript勉強シリーズ
- JavaScriptのthisについてメモ
- JavaScriptのコンストラクタについて
- JavaScriptのwindowについてのメモ
- JavaScriptのプロトタイプ継承について
- JavaScriptのプロトタイプチェーンについてメモ
- JavaScriptのスコープについてメモ
- JavaScriptの論理演算による存在チェックについて
- 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プロパティに代入されているオブジェクトに対して暗黙の参照を持っている
コメントを書く
コメント一覧