JavaScript/プロトタイプベース

このページ「JavaScript/プロトタイプベース」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。

JavaScriptはプロトタイプベースのオブジェクト指向言語です。 この場合はプロトタイプは「雛形」です。 目的の機能を持ったのオブジェクトの生成を、既に存在する雛形を複製することで実現する戦略といえます。 この雛形の事をプロトタイプと呼びます。 JavaScript以外のプロトタイプベースのオブジェクト指向言語としては Lua があげられます。 Lua は MediaWikiモジュールの記述言語にも採用されています。

最初のプロトタイプベースのオブジェクト指向言語は、Selfです。 Selfは、Smalltalkを開発したチームの一員がさらに記述性が高く簡素なオブジェクト指向言語の研究から誕生しました。 JavaScriptもSelfの影響を直接的に受けています。

プロトタイプに基づくプロトタイプベースに対し、クラスに基づいたオブジェクトシステムを採用したオブジェクト指向言語をクラスベースと呼びます(Smalltalk, C++, Java など)。 JavaScript ではECMACScript 2015/ES6でclass構文が導入されましたが、クラスベース風の構文を加えたに過ぎず依然JavaScriptはプロトタイプベースのオブジェクト指向言語です。

デザインパターンの用語を使えば

と捉えることができます。

プロトタイプの継承モデル

編集

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。

プロパティの継承

編集

prototypeオブジェクトの共有と派生

プロトタイプチェーン

編集

有向グラフ 木構造 figure

メソッドの模倣

編集

クラスベースで言うメソッドをプロトタイプベースが模倣しているという立場も取れます(JavaScriptのメソッドは全て仮想メソッド)。 逆にクラスベースのVTableは限定的な prototype とも。 アプローチは違っても言語機構のインフラストラクチャーは似通ってきている。

  • 大きな違い:プロトタイプベースでは、どのオブジェクトもプロトタイプになりうる。

オブジェクトの作成方法の構文的側面

編集

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。 new 演算子の正体

コンストラクタ

編集

伝統的な関数を使ったコンストラクタ

クラス・コンストラクタ

編集

class構文による --

Object.create

編集

ECMAScript 5 の Object.create

プロパティディスクリプタ

編集

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。

::標準組み込みオブジェクトのプロトタイプを書き換えるのは良くない/のコラムはここに移動か?