【发布时间】:2017-02-13 06:02:24
【问题描述】:
在我的应用程序中,我有这样的东西:
user.ts
export class User { ... }
现在,我这样做:
app.component.ts
callAnotherFunction(User);
如果我将类名作为字符串,即"User",我该怎么做?如果可能,我将如何检查变量是否真的是可用的类?
例如:
let test = "User";
if (**test is really a usable class**) {
console.log("Yay!");
callAnotherFunction(**something to put here**);
} else {
console.log("Error!");
}
我不确定这是否可能,但已经感谢您的意见。
到目前为止,我发现的只是这样的例子:
let test = "User";
let user = new window[test]();
但user 将是User 的一个实例。此外,它似乎在我的 Angular 2 应用程序中不起作用——可能是范围错误。如果我想试试这个,我需要用什么来代替window?
【问题讨论】:
-
你不能。如果它不在
window上,你会从哪里获得对此类的参考?此外,缩小的User类不会这样命名,更可能是更接近a的名称。请解释一下你需要这个做什么。您尝试做的事情看起来是个坏主意,而且很可能您有 XY 问题。 -
我想将动态内容放入一个 JavaScript 对象的实例中,例如
{ "class": "User", "name": "estus" }的结果应该与let user = new User(); user.name = "estus";相同。为了保持完全动态,我需要通过字符串"User"以某种方式获取User的实例。 -
您需要使用
{ provide: 'User', useClass: User }定义所有需要以这种方式访问的类,使用@Inject('User') user: User注入它们,使用injector.get('User')使用注入器动态获取它们。这很麻烦,但它会起作用。同样,这并不能解释为什么您需要以艰难的方式做到这一点。可能存在更符合框架的 DI 模式,因为这显然不是其中之一。 -
我同意,我应该找到更好的方法来做我想做的事。感谢您的意见!
标签: javascript class oop angular typescript