我正在尝试创建一种方法,该方法可以用作使用不同构造函数参数实例化不同类的通用解决方案。
这里是这种“想象的”方法的一个例子,我对它应该是什么样子的想法:
module flashist
{
export interface ISimpleClass<ObjectType>
{
new (): ObjectType;
}
export class Instantiator
{
public createInstance(Class: ISimpleClass<ClassType>, ...args): ClassType
{
// I understand, that this annotation is not possible
var result: any = new Class.apply(args);
return (result as ClassType);
}
}
}
问题发生在以下行:
var result: any = new Class.apply(args);
我想将未知参数传递给构造函数。我明白,这种语法是不可能的,我只是想展示一些类似于我想要实现的东西。
所以,我的问题是:我们在 TypeScript 和/或 JS 中是否有解决这个问题的方法?
最佳答案
我不确定您想要实现什么目标,但我认为有两种非最佳解决方案可能适合您的用例。
对参数进行硬编码。
public createInstance(Class: ISimpleClass<ClassType>, ...args): ClassType { var result:ClassType; if (args.length == 0) result = new ClassToCreate(); if (args.length == 1) result = new ClassToCreate(args[0]); // ... if (args.length == 8) result = new ClassToCreate(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]); // ... return result; }
我知道,看起来很丑。
使用
Object.create
.public createInstance(Class: ISimpleClass<ClassType>, ...args): ClassType { var result:any = Object.create(ClassToCreate.prototype); // create an object ClassToCreate.apply(result, args); // call the constructor return result; }
就像我说的,它们都不是最佳的,但在您找到更好的问题解决方案之前可能会有所帮助。也许只将一个 data
字典传递给每个构造函数?
关于javascript - 通过链接到具有不同数量参数的构造函数来实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34537289/