私はOOPSでチェスプログラムを書いて、私はなぜJavascriptはデフォルトで継承をサポートしていないのですか?
Class Piece{
int teamColor;
bool isLive;
Positon pos;
int Points;
.......
int getTeamColor(){....}
.......
};
Class Rook extend Piece{ //`is-a`
...... // No getTeamColor() definition here.. because the parent has the definition.
};
Class Pawn extend Piece{ //`is-a`
......// No getTeamColor() definition here.. because the parent has the definition.
};
、としてis-a
関係を実装する場合ならばベースOOPSからのように、私はいつも私は、
例、コードの再利用のための強力なツールとして継承を使用has-a
の関係でこれを行うことができますが、私が見ている欠点は です。派生クラスのすべての関数も再定義する必要があります。
例:など、すべてのルーク、騎士、質屋、王で再びgetTeamColorの再定義().... ..
var Pawn = function(teamColor,pos){
var piece = new Piece(teamColor,pos);
.......
this.getTeamColor = function(){
return piece.getTeamColor();
};
}
私の質問は、なぜjavascriptのdoesnotデフォルトのオプションとして、古典的な継承をサポートし、 です?
jOOPL(http://joopl.codeplex.com)をご覧ください。これは、クラスベースのOOPをサポートするための言語を強化する100%JavaScriptオブジェクト指向ライブラリです。したがって、継承と多型(さらに多くの機能)があります。私は数日間で新しいバージョンをリリースしようとしています。 –
JavaScriptは継承*をサポートしています。 "JavaScriptプロトタイプチェーン"を参照してください。 "なぜjavascriptが古典的な継承をデフォルトオプションとしてサポートしていないのか?" JavaScriptが定義されているからです。なぜJavaはTraitsを持っていませんがScalaはどうしますか?なぜRubyはPythonでMIをサポートしていますか?なぜC++にはDylanのMultiple Dispatchがありませんか?なぜエッフェルはLSPの中断を許していますか?まあ、彼らは*別の言語*であり、一方が正しいと主張する - 間接的な "古典的"手段 - は、別のアプローチがそれ以上(またはそれ以上)有効であることを否定することです。 – user2246674
javascriptオブジェクトモデルの詳細については、Mozilla Developer Networkの全記事を参照してください。 [ここにリンク](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model)。この記事では、Java(クラスベース)とJavascript(プロトタイプベース)を比較する際の継承、階層、および関係について説明します。 –