工厂类不是我要找的最终产品,但它基本上是我的问题归结为。我正在寻找一个我们称之为foo的类,它可以在另一个类栏中作为参数传递给它的构造函数,这样当以后调用fooInstance.create()时它会返回一个新的bar实例。我可以很容易地弄清楚如何使fooInstance.create(bar)创建一个bar实例。但这不是我需要的。我需要工厂类的每个实例来创建特定类型的对象。这样:
fooCar = new foo(Car);
fooTruck = new foo(Truck);
myCar = fooCar.create();
myTruck = fooTruck.create();
这将是Generics在c#中轻松处理的事情。我要么得到错误,要么最终搞砸foo的原型,然后改变foo的所有实例创建的类型。
答案 0 :(得分:1)
只需使用一个create
方法从工厂返回常规对象:
function foo (Constructor) {
return {
create: function () {
return new Constructor();
}
};
}
答案 1 :(得分: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();