class Class extends Object
クラスオブジェクトは、クラス定義を表し、静的メソッドとプロパティを含む。
各クラスオブジェクトは、そのクラスが拡張するクラス、または指定されていない場合はObjectを 基にしています。グローバルなクラスオブジェクトであるObject
は、Object.Prototype
をベースとするClass.Prototype
をベースとしているので、クラスはこれらのベースオブジェクトのいずれかからメソッドとプロパティを継承することができます。
"Static"メソッドおよびプロパティは、クラスオブジェクト自身が所有する(したがって、特定のインスタンスには適用されない)メソッドおよびプロパティであり、クラスのインスタンスに対するメソッドおよびプロパティは、クラスのPrototypeが所有します。
「Class」はClassクラスそのものであるため、以下では任意のクラスオブジェクトのプレースホルダとして「ClassObj」を使用します。通常、クラスオブジェクトは、そのクラス定義で与えられた名前で呼ばれます。
このクラスの新しいインスタンスを構築します。
Obj := ClassObj(Params*)
Obj := ClassObj.Call(Params*)
この静的メソッドは、通常、Object、Array、Mapクラスから継承されます。以下のような機能を備えています:
Call は、static Call()
のような静的メソッドを定義することにより、クラス定義内でオーバーライドすることができます。これにより、クラスは新しいインスタンスを修正したり、構築できないようにすることができます。
なお、Class()
(ここでは文字通り "Class"を使用)は、Class.Prototype
に基づいて新しいClassオブジェクトを構築するために使用することができます。しかし、この新しいオブジェクトは、Objectのサブクラスではないため、当初はCallメソッドを持ちません。Baseに代入することでObjectのサブクラスになったり、Callメソッドを他のクラスから再実装またはコピーすることができます。また、標準的なCallメソッドでインスタンス化する前に、Prototypeを作成し、クラスに割り当てる必要があります。
クラスのすべてのインスタンスの基となるオブジェクトを取得または設定します。
Proto := ClassObj.Prototype
ClassObj.Prototype := Proto
デフォルトでは、クラスのプロトタイプは、クラス定義内で定義されたすべてのインスタンスメソッドとダイナミックプロパティを含み、メソッドやプロパティのゲッター/セッターへの参照を取得したり、新しいものを定義したりするために使用できます。スクリプトは、すべてのインスタンスのデフォルトのプロパティ値として機能する、新しい値のプロパティを定義することもできます。
クラスのPrototypeは、通常、ベースクラスのPrototypeをベースにしているので、ClassObj.Prototype.base == ClassObj.base.Prototype
。
プロトタイプは、クラス定義で作成されたクラスオブジェクトの自前プロパティとして自動的に定義されます。