如何使用变量实例化类



在TypeScript中,我在其他讨论中看到应该有一种方法可以创建一个类型依赖于变量的类。

例如,如果我们有 . .

.
class MyClass {    
   someFunc(){alert("Hello");}    
}
var myClassName = "MyClass";

答案应该是:

答案#1:
var myClassInstance = new (<any>window)[myClassName]();

答案#2:
var myClassInstance = Object.create(window[myClassName]);

正在控制台中尝试这些,但都不适合我。
对于#1,我收到错误消息:"语法错误",或者如果我省略<any>则"对象不支持此操作"。
对于#2,我收到错误消息:"Object.create:参数不是对象,也不是null">

有没有人知道为什么这些对我不起作用,和/或我如何根据保存类名的变量的值在 Typescript 中实例化一个类?谢谢!

你不能

class做到这一点 - 你必须使用 ES5 构造函数:

function MyClass() {}
MyClass.prototype.someFunc = function() {
  alert("Hello!");
};
var myClassName = "MyClass";
var myClassInstance = new window[myClassName]();
myClassInstance.someFunc();

这些"答案"不起作用的原因是MyClass不是全局对象(在您的情况下是窗口(的属性

对于使用 letconst 在全局范围内声明的变量也是如此

但是,由于您似乎愿意切换到老式定义,即愿意重写类定义,因此您可以随时使用它 - 好处是涉及最少的重写

注意:使用var不能letconst

var MyClass = class MyClass {    
   someFunc(){alert("Hello");}
}
var AnotherClass = class AnotherClass {    
   someFunc(){alert("Hello again");}
}
var YetAnotherClass = class YetAnotherClass {    
   someFunc(){alert("Hello once more");}
}

然后你可以简单地

let instance = new window[myClassName]();

此外,根据类的定义位置/方式(在导入中?(,实际上可能需要执行类似操作

window.MyClass = class MyClass {    
   someFunc(){alert("Hello");}
}

相反

最新更新