オブジェクトモデルがどのように進化してきたかを理解しておくと役立ちます。初期バージョン用の単純なスクリプトメカニズムとして誕生しました。使用してより複雑なアプリケーションを作成するようになりました。プログラマーのニーズに応えるために、その後の各リリースには複雑なアプリケーションの作成を容易にする言語機能が追加されてきました。以前で使用されていたプログラミング言語のバージョンです。オブジェクトモデルは基本的なデータ型としてのオブジェクトの概念をベースにしていました。オブジェクトは、プロパティのグループを持つ複合データ型です。オブジェクトモデルについて説明するとき、プロパティという用語には、変数、関数、メソッドなど、オブジェクトに関連付けられるあらゆるものが含まれます。キーワードによるクラスの定義はサポートされていませんが、プロトタイプオブジェクトと呼ばれる特殊なオブジェクトを使用してクラスを定義できます。ようなプロトタイプベース言語では、既存オブジェクトを他のオブジェクトのモデル(またはプロトタイプ)として使用します。クラスベース言語のオブジェクトはテンプレートになるクラスを示す場合がありますが、プロトタイプベース言語のオブジェクトはテンプレートになる別のオブジェクト、つまりプロトタイプを示します。クラスを作成するには、クラスのコンストラクター関数を定義します。関数は、単に抽象的な定義ではなく実際のオブジェクトです。作成したコンストラクター関数は、そのクラスのインスタンスのプロトタイプ的なオブジェクトになります。クラスを次のように定義します。クラスを拡張する他のクラスとしても機能します。つの手順を実行します。最初に、次のようにクラスのコンストラクター関数を定義して、クラスを作成します。クラスのプロトタイプであると宣言します。クラスのインスタンス)が含まれています。クラスは、プロトタイプチェーンと呼ばれる継承関係内で相互にリンクされました。次の図は、プロトタイプチェーン内の関係を示しています。いう静的プロパティが含まれています。クラスのインスタンス)を保持しているからです。クラスにリンクされています。オブジェクトを保持します。クラスのプロトタイプチェーンを継承します。いう名前のプロパティを作成しました。プロパティを継承することを確認できます。いうプロパティを検索しますが、このプロパティは見つかりません。いうプロパティは見つかりません。プロパティを見つけ、そのプロパティの値を出力します。簡潔にするために、ここでは、プロトタイプチェーンの詳細および複雑さに関する説明の多くを省略します。オブジェクトモデルの理解に役立つ情報を提供します。新しいキーワードが導入されました。変わりがないことを理解する必要があります。クラスの定義に使用する新しいシンタックスが追加されたにすぎません。プロトタイプチェーンは、両方の言語バージョンで同じように機能します。導入された新しいシンタックスでは、より直観的な方法でクラスを定義できます。コンパイル時の型チェックに使用するための型注釈も導入されました。プロパティにはブール値だけが含まれることを宣言できます。キーワードにより、サブクラスを作成するプロセスが簡略化されます。つの手順で実行されています。}コンストラクターは、クラス定義の一部として宣言されるようになりました。明示的に宣言する必要があります。インターフェイス定義のサポートも追加され、オブジェクト間の通信用に正式に定義されたプロトコルでオブジェクト指向プログラムをさらに改良できるようになりました。関連付けられる一般的なオブジェクト指向プログラミングパラダイムでは、クラスを使用してオブジェクトの型を定義します。このパラダイムを採り入れたプログラミング言語も、クラスにより定義されるデータ型のインスタンスを作成するためにクラスを使用する傾向にあります。この両方の目的でクラスを使用しますが、プロトタイプベース言語であることから興味深い特徴が付け加えられています。クラス定義ごとに、動作と状態の両方を共有できる特別なクラスオブジェクトを作成します。プログラマーはほとんどいないでしょう。アプリケーションを作成できるように設計されています。いう名前の単純なクラスを表すクラスオブジェクトの構造を示しています。図中の四角形はオブジェクトを表します。クラスオブジェクト(CA)には、その他の重要なオブジェクトへの参照が多数含まれています。インスタンス特性オブジェクト(TA)は、クラス定義内で定義されたインスタンスプロパティを格納します。「クラス」を表します)。プロパティを通じて関連付けられた元のクラスオブジェクトを意味します。新しく導入された特性オブジェクトは、パフォーマンスを考慮して実装されました。プロトタイプチェーン内を移動するため時間のかかるプロセスでした。継承されたプロパティが、スーパークラスからサブクラスの特性オブジェクトにコピーされます。このため、名前のルックアップが効率的になり、所要時間も短縮されています。特性オブジェクトはプログラマーコードに直接アクセスできませんが、パフォーマンスが向上しメモリ使用量が削減することからオブジェクトの存在がわかります。クラスのレイアウトと内容に関する詳細情報を提供します。多くのマシン命令を直接生成することができます。このため、時間のかかる名前のルックアップを行わずにプロパティにアクセスしたり、メソッドを直接呼び出したりすることができ、実行時間を大幅に短縮できます。類似オブジェクトに比べると、オブジェクトのメモリフットプリントをかなり小さくできます。宣言されていない場合)、クラスのインスタンスは動的に追加するプロパティにハッシュテーブルを必要とせず、このクラスで定義された固定プロパティの特性オブジェクトおよびスロットへのポインターを保持するだけです。特性オブジェクトは、内部実装の詳細です。今後のバージョンで変更されない、またはなくならないとは限りません。プロパティがあります。プロトタイプベース言語としてのルーツのレガシーです。サポートの歴史を参照してください。プロパティは読み取り専用で、別のオブジェクトを指すように変更することはできません。プロパティとは異なります。旧バージョンのプロパティでは、別のクラスを指すようにプロトタイプを再割り当てできました。プロパティは読み取り専用ですが、参照されるプロトタイプオブジェクトは読み取り専用ではありません。プロトタイプオブジェクトに新しいプロパティを追加することができます。プロトタイプオブジェクトに追加されたプロパティは、クラスのすべてのインスタンス間で共有されます。二次的な役割を果たすだけです。主な継承メカニズムである固定プロパティの継承は、特性オブジェクトによって内部的に処理されます。固定プロパティは、クラス定義の一部として定義される変数またはメソッドです。キーワードで関連付けられる継承メカニズムなので、クラス継承とも呼ばれます。プロトタイプチェーンは、固定プロパティの継承より動的な代替継承メカニズムになります。プロパティからもクラスのプロトタイプオブジェクトに追加できます。キーワードで宣言しない限り、プロトタイプオブジェクトに追加されたプロパティにアクセスできない場合があります。クラスのプロトタイプオブジェクトのプロパティに割り当てられた関数です。次の例は、これらのメソッドの宣言が理論的にどのように見えるかを示します。実装の詳細により実際の実装はやや異なります。}前述のとおり、プロパティは、クラス定義外部でクラスのプロトタイプオブジェクトに関連付けることができます。クラスの定義外部で定義することもできます。キーワードは必要ありません。つのオプションがあります。メソッドを定義します。メソッドを再定義します。キーワードを使用する必要はありません。メソッドを次のコードのように再定義できます。いう名前の固定プロパティを定義できます。キーワードを使用する必要があります。つの別個の継承メカニズムが混在することで、コアクラスのプロパティおよびメソッドに関して留意すべき互換性の問題が生じます。言語仕様との互換性からは、プロトタイプの継承を使用する必要があります。コアクラスのプロパティおよびメソッドは、そのクラスのプロトタイプオブジェクトで定義されます。互換性では、固定プロパティの継承を使用することが要求されます。キーワードを使用してクラス定義で定義されます。プロトタイプではなく固定プロパティの継承を使用すると、ランタイムパフォーマンスの大幅な向上につながります。この問題を解決するために、コアクラスにプロトタイプの継承と固定プロパティの継承の両方を使用しています。セットのプロパティおよびメソッドが含まれます。名前空間で定義されます。セットのプロパティおよびメソッド間の選択のために便利なメカニズムを提供します。名前空間を使用しない場合、コアクラスのインスタンスは、コアクラスのプロトタイプオブジェクトに定義されているプロパティおよびメソッドを継承します。バージョンを継承します。固定プロパティが利用可能な場合には、同じ名前のプロトタイププロパティではなく、その固定プロパティが必ず使用されます。名前空間バージョンのプロパティまたはメソッドを選択的に使用することができます。メソッドを使用しています。名前空間を開くことができます。名前空間を開いています。名前空間をプログラム全体に適用できます。略)はプロトタイプ継承オプションを表します。プロトタイプバージョンを使用するには、両方のコンパイラーオプションを反対の値に設定します。名前空間がどのように影響する可能性があるかを理解しておく必要があります。名前空間を使用する必要があります。キーワードも使用しないでください。オブジェクト指向プログラミング。