1

ファクトリ クラスは、私が探している最終製品ではありませんが、基本的には私の問題です。別のクラス bar でパラメーターとしてコンストラクターに渡すことができる foo と呼ぶクラスを探しています。後で fooInstance.create() を呼び出すと、bar の新しいインスタンスが返されます。fooInstance.create(bar) で bar のインスタンスを作成する方法は簡単に理解できます。しかし、それは私が必要とするものではありません。特定のタイプのオブジェクトを作成するには、ファクトリ クラスの各インスタンスが必要です。それで:

    fooCar = new foo(Car);
    fooTruck = new foo(Truck);
    myCar = fooCar.create();
    myTruck = fooTruck.create();

これは、C# の Generics で簡単に処理できます。エラーが発生するか、foo のすべてのインスタンスによって作成された型を変更する foo のプロトタイプを台無しにしてしまいます。

4

2 に答える 2

1

createメソッドを 1 つだけ使用して、ファクトリから通常のオブジェクトを返すだけです。

function foo (Constructor) {
    return {
        create: function () {
            return new Constructor();
        }
    };
}

フィドルをチェックしてください: http://jsfiddle.net/fR5Gz/1/

于 2013-01-18T04:13:40.660 に答える
0

ご協力いただきありがとうございます。@missingno私がやろうとしていることの詳細が問題を曇らせると思っていましたが、今では逆だったと思います。次回はもっとよくわかります。タイプセーフを探していたわけではありませんが、それがなければ、このようにする理由はないかもしれません。古典的な考え方にとらわれているのかもしれません。

このスレッドで想定されていたような電子メールアラートを受け取っていなかったので、今朝、私は実際に自分でそれを理解しました。まだ返信がないと思っていました。これが私の解決策です(関連するコードのみ):

    ORM.Repository = (function (){
    function Repository(ob){
        this.construct = ob;
    };
    //bunch of other generic repository stuff deleted
    Repository.prototype.make = function () { return new this.construct();}
    return Repository;
})();

使用法:

    var carRepository = new ORM.Repository(car);
    var personRepository = new ORM.Repository(person);
    var myCar = carRepository.make();
    var user = personRepository.make();
于 2013-01-18T15:11:22.117 に答える