JavaScriptのオブジェクト指向
- 継承・ポリモーフィズム・カプセル化のOOP「大三元」がない
- すべてがオブジェクトでない
- プロトタイプベースなのにクラスというのはおかしい
var str = new String;
str.split; //=>function
str.split();
- 変数strが刺すオブジェクトに対してsplitプロパティを参照する
- strオブジェクトはsplitプロパティを保持していないので、Stringのプロトタイプを参照する
- プロトタイプが保持するsplitプロパティの値(Functionオブジェクト)を返す
- カッコが指定されているので、返された値を実行する
プロトタイプチェーン
プロトタイプは、クラス構造に基づいた木構造となっており、プロパティが存在しない場合は、参照しているプロトタイプをルートに向かって順番に探していく。この一連のプロトタイプのつながりを「プロトタイプチェーン」と呼ぶ
チェーン | 発動タイミング | 参照時に最後まで見つからない場合 | 更新時に最後まで見つからない場合 |
---|---|---|---|
スコープチェーン | 発動の参照と更新 | 例外を発生する | グローバルオブジェクトに代入する |
プロトタイプチェーン | プロパティの参照 | undefinedを返す | たどられない。対象のプロパティとなる |