質問は、言語設計の観点からです。
状況について少し説明する必要があります。私はプロトタイプをサポートしない JavaScript バリアントに取り組んでいますが、適切な型システム (最も重要なのは instanceof のサポート) が遅れています。ecmascript の仕様は重要ではないので、別のより適したものを自由に実装できます。
バリアントでは: -
- でコンストラクターを宣言する
function foo()
のではなく、コンストラクターはテンプレート ファイルで宣言されます。つまり、コンストラクターは名前空間に存在します (ファイルのパスによって決定されます)。 - 現在、動作のすべての継承はテンプレートを適用することによって行われます。つまり、すべての共有関数が個々のオブジェクトにコピーされます (結局のところ、プロトタイプはありません)。
Web 開発者になったことがない私は、プロトタイプを怒って使用したことがないという、少し奇妙な立場に置かれています。これは私がそれらについて意見を述べるのを止めていませんが。
私が理解しているように、プロトタイプモデルに関する私の主な問題は
- オブジェクトの名前空間、obj.prototype、obj.constructor の不必要なポイ捨て (オブジェクトをマップとして扱う能力を保持しようとする未熟な反論ですか?)
- 追加レベルの間接化を直接使用する方が簡単な場合、実行時に共有動作を変更する機能は不要に思えます
obj.shared.foo()
。特に、それはかなり大きな実装上の頭痛の種です - 人々は、プロトタイプとコンストラクターの違いなど、プロトタイプを一般的によく理解していないようです。
したがって、これらを回避するために、特別な演算子コンストラクターを使用することを考えています。基本的には、各オブジェクトにはコンストラクターのリストがあり、それらにアクセスする必要がある場合があります。
var x = new com.acme.X();
com.acme.Y(x,[]); // apply y
(constructorsof x) // [com.acme.Y,com.acme.X,Object];
x instanceof com.acme.X; // true
x instanceof com.acme.Y; // true
すべてのフィードバックに感謝します。伝えたいことがたくさんあるので、私の視点を理解するのは難しいかもしれませんが、それは重要な決定であり、専門家の意見は非常に貴重です.
- プロトタイプ モデルの良い点も悪い点も、私の理解を深めることができれば何でも構いません。
- 私の提案に対する考え
ありがとう、
マイク
編集:提案がうまくいけば、今は理にかなっています。