クラスベースの言語のコンテキストでOOPを主に扱った後、初めてJavascriptのプログラミングを始めたとき、プロトタイプベースのOOPがこれまでにクラスベースのOOPよりも優先されます。
この質問を、特にJavascriptに関する質問と見なさないでください(長年にわたって、プロトタイピングとはまったく関係のない多くの障害がありました)。代わりに、プロトタイピングとクラスの理論的な利点を組み合わせて見てください。
ありがとうございました。
JavaでRPGゲームを書くとき、私は両方のアプローチについてかなりの経験をしました。もともと私はクラスベースのOOPを使用してゲーム全体を記述しましたが、最終的にこれが間違ったアプローチであることに気付きました(クラス階層が拡大するにつれて、それは維持できなくなりました)。したがって、コードベース全体をプロトタイプベースのコードに変換しました。その結果、管理がmuchよくなり、簡単になりました。
興味があればここにソースコード( 暴君-Java Roguelike )
主な利点は次のとおりです。
主な欠点は次のとおりです。
最後にいくつかの実装ノート:
プロトタイプベースの主な利点OOPそのオブジェクトと「クラス」は実行時に拡張できます。
クラスベースのOOPにはいくつかの優れた機能がありますが、残念ながら、それはプログラミング言語に依存します。
Object Pascal(Delphi)、VB.NetおよびC#には、プロパティ(フィールドと混同しないでください)およびプロパティのアクセスメソッドを使用する非常に直接的な方法がありますが、Java&C++、プロパティにアクセスしますまた、PHPには、「マジックメソッド」と呼ばれる両方が混在しています。
いくつかの動的型付けクラスがありますが、メインクラスO.O.言語には静的型付けがあります。クラスO.O.での静的型付けそれらのI.D.E.を作成できるオブジェクトイントロスペクションと呼ばれる機能を許可するため、非常に便利です。 Webページを視覚的かつ迅速に開発します。
@umlcatに同意する必要があります。クラス拡張は大きな利点です。たとえば、長期間にわたって文字列クラスに機能を追加したいとします。 C++では、以前の文字列クラスの世代を継承し続けることによってこれを行います。このアプローチの問題は、各世代が本質的に独自の異なるタイプになり、既存のコードベースの大量の書き換えにつながる可能性があることです。プロトタイプの継承を使用すると、新しいメソッドを元の基本クラスに「アタッチ」するだけで、どこにでも継承クラスと継承関係を大規模に構築する必要がありません。私は、C++が新しい標準で同様の拡張メカニズムを考え出すことを望んでいます。しかし、彼らの委員会は、キャッチーで人気のある機能を追加したい人々によって運営されているようです。