javascript - 通过链接到具有不同数量参数的构造函数来实例化类

标签 javascript typescript instantiation

我正在尝试创建一种方法,该方法可以用作使用不同构造函数参数实例化不同类的通用解决方案。

这里是这种“想象的”方法的一个例子,我对它应该是什么样子的想法:

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 中是否有解决这个问题的方法?

最佳答案

我不确定您想要实现什么目标,但我认为有两种非最佳解决方案可能适合您的用例。

  1. 对参数进行硬编码。

    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;
    }
    

    我知道,看起来很丑。

  2. 使用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/

相关文章:

javascript - Angularjs html 标签正在显示

javascript canvas setTimeout 控制台 TypeError : is not a function

javascript - 如何进行 worker 与 worker 之间的沟通?

javascript - 有没有办法删除世博会每个屏幕上的标题?

c++ - 为什么 delete 仅在 main 中起作用,而在将要删除的一个或多个对象作为输入的函数中不起作用?

javascript - JavaScript 中的多重继承/原型(prototype)

typescript - 自动生成的函数的Typesafe包装,然后仅通过使用 `__typename`作为参数来动态调用。 typescript

typescript - 如何编写一个函数,通过类型检查将字段添加到对象数组中?

vb.net - 类似乎在没有实例的情况下使用。有可能的? VB网

php - 实例化 DateTime PhP 对象后无法立即应用函数