【问题标题】:ES6 class instance from string [duplicate]来自字符串的 ES6 类实例 [重复]
【发布时间】:2019-06-14 16:08:36
【问题描述】:

我尝试从字符串动态设置实例。我已经阅读了很多关于它的问题,但答案对我不起作用。

它表示可以在名称前使用window 来设置实例。它不起作用。

class MyClass {
  // Something useful
}
let params = {};
let name = 'MyClass';
let instance = new window[name](params);

我也尝试过不走运(抛出错误):

let instance = new window['MyClass'](params);

但是,这是可行的:

let instance = new MyClass(params);

为什么在这种情况下我不能使用window?还有其他想法吗?

【问题讨论】:

  • 你只能使用window,如果它是一个全局变量。您必须在本地范围内定义类,而不是在全局范围内。
  • @Barmar 是的,我在另一个类的构造函数中。
  • 一个 hacky 方法是 eval('var instance = new '+name+'()')。限制看起来类似于older question of mine

标签: javascript string instance es6-class


【解决方案1】:

只有全局变量会自动放入window

创建一个从类名映射到类的对象:

const classMap = {
    "MyClass": MyClass,
    "MyClass2": MyClass2,
    ...
};

然后使用classMap[name](params) 而不是window[name](params)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2020-01-25
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多