3

Java で Javascript プロトタイプをシミュレートできるかどうかを知りたいです。変数のリストをJavaの関数に関連付けることは可能ですか? 可能であれば、Javascript のプロトタイプに似たものを作成したいと考えています。

だからここに例があります(Javascriptで):

    var s = doStuff.prototype;
s.isImplemented = false;
function doStuff(){
    //this function has not yet been implemented
}

var s = functionIsImplemented.prototype;
s.isImplemented = true;
function functionIsImplemented(theFunction){
    //this function returns true if the function has been identified as "implemented"
    if(theFunction.prototype.isImplemented == true){
        return true;
    }
    return false;
}
alert(functionIsImplemented(doStuff)); //this should print "false"
alert(functionIsImplemented(functionIsImplemented)); //this should print "true"​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

Javaでこれと同等のことを行う方法はありますか?

4

1 に答える 1

4

はい、確かに可能で、状況によっては非常に便利です。

通常、次のようにします。

  • プロパティのマップを含むクラスを作成します。これが、すべてのプロトタイプの「ベース オブジェクト」クラスになります。K はおそらく文字列、V はおそらくオブジェクト
  • プロパティのゲッターとセッターを作成する
  • 必要に応じて他のユーティリティ メソッドを追加します。たとえば、関数が実装されているかどうかをチェックすることは、基本的にプロパティ マップのチェックが特定のキーを含むことを意味します。
  • 別のオブジェクトのプロパティ マップを複製するか、(より複雑な) 元のオブジェクトへの参照を維持することにより、プロトタイプ ベースの継承を実装します。
  • ある種の関数オブジェクトを使用して、プロパティ内に任意のコードを格納できるようにする

動的言語でこれを直接行う場合ほどエレガントではありませんが、機能し、同じ利点が得られます (実行時の柔軟性、厳格な OOP の制約の回避、迅速なプロトタイピングなど)。

また、同じ欠点もあります - 静的型チェックの損失とパフォーマンスのオーバーヘッドが主なものです。

例として、私が書いたオープン ソース ゲーム ( Tyrant ) は、ゲーム内のすべてのオブジェクトに対してこのアプローチを使用しています。

于 2012-07-19T04:24:22.163 に答える