訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
ECMAScriptは、C++、Smalltalk、Javaのようなクラスを利用しません。 その代わりにオブジェクトは、リテラル表記経由または、オブジェクトの生成とその後にそれらのプロパティに初期値を関連付けることによってそれらの全部または一部を初期化する実行コードを生成するコンストラクタ経由含む様々な方法で生成される場合があります。 各コンストラクタは、プロトタイプベースの継承プロパティと共有プロパティを実装する為に使用される"prototype"という名前のプロパティを持つ関数です。 オブジェクトは、new 式でコンストラクタを使用することによって生成されます。 例えば、new Date(2009,11) という式は、新たなDateオブジェクトを生成します。 new を使わないコンストラクタの呼び出しは、コンストラクタに依存する結果を持ちます。 例えば、Date() は、任意のオブジェクトではなく、現在日付時刻についての文字列表現を生成します。 各オブジェクトは、そのコンストラクタのprototypeプロパティ(呼んだ当該オブジェクトのプロトタイプ)の値への暗黙のリファレンスを持ちます。 更にprototypeは、そのプロトタイプ等々へのnullではない暗黙のリファレンスを持つ場合があり、これはプロトタイプチェーンと呼ばれます。 リファレンスが、オブジェクト内のプロパティに作成される場合、それはその名前のプロパティを含むプロトタイプチェーン内にある最初のオブジェクトにあるその名前のプロパティへのリファレンスです。 言い換えると、ちょっと前に言及した最初のオブジェクトは、そのようなプロパティについて検査されるということであり、もし、そのオブジェクトが名前付きプロパティを含む場合には、それは、リファレンスが参照するプロパティであることを指し、もし、オブジェクトが名前付きプロパティを含まない場合には、そのオブジェクトにおける次のプロパティが、検査され。。。といったようになります。
クラスベースのオブジェクト指向言語は、一般には、状態が、インスタンスによって引き継がれ、メソッドが、クラスによって引き継がれ、継承は、構造と動作についてのみなされます。 ECMAScriptでは、その状態とメソッドが、オブジェクトによって引き継がれ、構造、動作、状態が全て継承されます。 固有のプロパティに直に含まれない全てのオブジェクトは、それらのプロトタイプが、そのプロパティとその値の共有を含みます。 図 1 は、これを示しています。 CF は、任意のコンストラクタ(、または、任意のオブジェクト)です。 cf1, cf2, cf3, cf4, cf5の5つのオブジェクトは、new 式を使って生成されています。 これらのオブジェクトは、それぞれ q1 と q2 という名前のプロパティを含みます。 波線は、暗黙のプロトタイプ関係を表現しているので、例えば、cf3のプロパティは、CFp となります。 コンストラクタ CF は、それ自身に CFp, cf1, cf2, cf3, cf4, cf5には、(直接)見えない P1 と P2 という名称の2つのプロパティを持っています。 プロパティ CFp にある CFP1 という名のプロパティは、q1、q2 や CFP1 という名前ではない CFp の暗黙のプロトタイプチェーン内で見つかった何らかのプロパティであるものとして(、 CF によってではなく、) cf1, cf2, cf3, cf4, cf5 によって共有されます。 これらにおける注釈としては、 CF と CFp 間の(明示的なリンクはありますが、 CF と cf1, cf2, cf3, cf4, cf5 のそれぞれとの間に)暗黙のプロパティリンクは、存在しないということです。 クラスベースのオブジェクト言語とは異なり、プロパティは、それらに値を関連付けることによって動的にオブジェクトに追加されることが可能です。 それは、つまり、コンストラクタは、構築されたオブジェクトのプロパティの全て、または、一部に対し、名称や値の関連付けを要求しないということです。 上記のダイアグラムでは、CFp 内のプロパティに新たな値を関連付けることによって cf1, cf2, cf3, cf4, cf5に新たな共有プロパティを追加することができます。