2

質問は、言語設計の観点からです。

状況について少し説明する必要があります。私はプロトタイプをサポートしない 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

すべてのフィードバックに感謝します。伝えたいことがたくさんあるので、私の視点を理解するのは難しいかもしれませんが、それは重要な決定であり、専門家の意見は非常に貴重です.

  • プロトタイプ モデルの良い点も悪い点も、私の理解を深めることができれば何でも構いません。
  • 私の提案に対する考え

ありがとう、

マイク

編集:提案がうまくいけば、今は理にかなっています。

4

4 に答える 4

2

プロトタイプモデルに関するあなたの問題は有効ではないと思います:

  • オブジェクトの名前空間、obj.prototype、obj.constructor の不必要なポイ捨て

prototypeオブジェクトインスタンスではなく、コンストラクター関数のプロパティです。また、残念ながらプログラムで設定できない [[DontEnum]] 属性のため、問題は思ったほど悪くはありません。可能であれば、認識されている問題のいくつかは解消されます。

オブジェクトをマップとして扱う能力を保持しようとする、これは未熟な異論ですか? おそらくそうではありませんか?

キーが文字列である限り、オブジェクトをマップとして使用しても問題はありませんhasOwnProperty()

  • 余分なレベルの間接化を直接使用する方がより単純な obj.shared.foo() になる場合、実行時に共有動作を変更する機能は不要に思われます。特に、それはかなり大きな実装上の頭痛の種です

プロトタイプチェーンを実装する際の大きな実装上の頭痛の種がどこにあるのかわかりません。実際、プロトタイプの継承は、クラスベースの継承よりも概念的に単純であると考えています。クラスベースの継承は、遅延バインディングを使用する言語では何のメリットもありません。

  • 人々は、プロトタイプとコンストラクターの違いなど、プロトタイプを一般的によく理解していないようです。

Java や C++ のようなクラスベースの oo 言語しか知らない人は、JavaScript の継承システムを理解していない、11 時のニュース.

MarkusQ の提案に加えて、Ioもチェックしてみてください。

于 2009-03-09T12:38:41.353 に答える
0

プロトタイプ モデルの先駆けとなった言語である「self」について読むことは、JavaScript の観点から考えるだけでなく、おそらく役立つでしょう (特に、多くの人がそうであるように、それを「Web プログラミング」と関連付けているように思われるため)。開始するためのいくつかのリンク:

http://selflanguage.org/
http://www.self-support.com/

歴史を学ばない人は、歴史を再実装する運命にあることを忘れないでください。

于 2009-03-09T04:43:05.930 に答える