1

工厂课程不是我正在寻找的最终产品,但它基本上是我的问题归结为。我正在寻找一个我们将调用 foo 的类,它可以在另一个类 bar 中作为参数传递给它的构造函数,这样当稍后调用 fooInstance.create() 时,它会返回一个新的 bar 实例。我可以很容易地弄清楚如何让 fooInstance.create(bar) 创建一个 bar 的实例。但这不是我需要的。我需要工厂类的每个实例来创建特定类型的对象。所以:

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

这将是 c# 中的泛型轻松处理的事情。我要么得到错误,要么最终搞砸了 foo 的原型,然后更改了 foo 的所有实例创建的类型。

4

2 回答 2

1

只需从您的工厂返回一个常规对象,只需一种create方法:

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 回答