如何在JavaScript中从字符串实例化类

笔筒

我处于一种奇怪的情况下,我需要使用存储在变量中的字符串实例化一个新的类,但是即使我确定类名正确,我也会收到一个错误,即给定的类名不是构造函数

这是一个无效的伪代码:

class Foo {
    constructor(){
        console.log('Foo!');
    }
};
const foo = 'Foo';
const bar = new window[foo]();
console.log(bar);

这引发此错误:

Uncaught TypeError: window[foo] is not a constructor
jfriend00

一种可能性是使用eval

class Foo {
    constructor(){
        console.log('Foo!');
    }
};
const foo = 'Foo';
const bar = eval(`new ${foo}()`);
console.log(bar);

您将必须评估eval()在特定情况下使用的安全性如果您知道要插入的字符串的起源,eval()或者可以先对其进行清理,那么它可能是安全的。


我个人更希望使用查找表。如果您有已知数量的要按字符串映射的类,则可以创建自己的查找表并使用它。这样做的好处是,如果字符串中包含奇怪的内容,则不会有意外的结果:

class Foo {
    constructor(){
        console.log('Foo!');
    }
};

class Goo {
    constructor(){
        console.log('Goo!');
    }
};

// construct dict object that contains our mapping between strings and classes    
const dict = new Map([['Foo', Foo], ['Goo', Goo]]);

// make a class from a string
const foo = 'Foo';
let bar = new (dict.get(foo))()

console.log(bar);

如果您真的要走这条路线,则可能需要将其封装在一个函数中,然后如果在中找不到该字符串,则添加错误处理dict

Window由于以下几个原因,这应该比使用全局或对象作为查找机制更好

  1. 如果我还记得的话,classES6中的定义不会像其他顶级变量声明那样自动地放到全局对象上(JavaScript试图避免在先前的设计错误之上添加更多的垃圾)。

  2. 因此,如果要手动分配给查找对象,则不妨使用其他对象而不污染全局对象。这就是该dict对象用于此处目的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Javascript

如何在JavaScript中“实例化”原始字符串(字符串文字)

来自分类Dev

如何在Swift中从字符串实例化类和初始化?

来自分类Dev

如何从Rails中的名称字符串实例化类?

来自分类Dev

如何在Swift中从字符串创建类的实例

来自分类Dev

如何在Javascript字符串中添加类名?

来自分类Dev

在C#中,如果(字符串)类名称已知,如何从该(字符串)类实例化对象?

来自分类Dev

如何在python中的类函数内将类的实例表示为字符串?

来自分类Dev

如何通过CURRENT文件中的字符串名称在Python中实例化类?

来自分类Java

Java从字符串实例化类

来自分类Dev

从字符串实例化Kotlin类

来自分类Dev

如何在 VSCode 的监视面板中查看类实例的字符串表示而不是其类型?

来自分类Dev

为什么可以从字符串变量而不是PHP中的字符串实例化类?

来自分类Dev

如何从Crystal中的字符串名称创建类实例?

来自分类Dev

如何在Python 3.x中从字符串实例化函数?

来自分类Dev

如何在JavaScript中的类名语法中连接字符串?

来自分类Dev

创建动态类名时,如何在JavaScript字符串中添加空格?

来自分类Dev

如何从实例的字符串名称创建类的实例?

来自分类Dev

MVVM:如何在模型类中连接字符串?

来自分类Dev

如何在类参数中对字符串排序?

来自分类Dev

如何在Moq中模拟字符串类

来自分类Dev

如何在Javascript中格式化字符串?

来自分类Dev

如何在 Dart 中对函数进行字符串化和解字符串化?

来自分类Dev

如何在Javascript中对数组进行字符串化?

来自分类Dev

如何在JavaScript中对正则表达式进行子字符串化

来自分类Dev

如何在Javascript中访问串联字符串的字符

来自分类Java

Java如何从字符串实例化一个类

来自分类Dev

仅当传递的参数是字符串时,如何实例化类?

来自分类Dev

涉及多个值/字符串时的类实例化

来自分类Dev

Phaser:通过字符串引用实例化类

Related 相关文章

  1. 1

    如何在JavaScript中“实例化”原始字符串(字符串文字)

  2. 2

    如何在Swift中从字符串实例化类和初始化?

  3. 3

    如何从Rails中的名称字符串实例化类?

  4. 4

    如何在Swift中从字符串创建类的实例

  5. 5

    如何在Javascript字符串中添加类名?

  6. 6

    在C#中,如果(字符串)类名称已知,如何从该(字符串)类实例化对象?

  7. 7

    如何在python中的类函数内将类的实例表示为字符串?

  8. 8

    如何通过CURRENT文件中的字符串名称在Python中实例化类?

  9. 9

    Java从字符串实例化类

  10. 10

    从字符串实例化Kotlin类

  11. 11

    如何在 VSCode 的监视面板中查看类实例的字符串表示而不是其类型?

  12. 12

    为什么可以从字符串变量而不是PHP中的字符串实例化类?

  13. 13

    如何从Crystal中的字符串名称创建类实例?

  14. 14

    如何在Python 3.x中从字符串实例化函数?

  15. 15

    如何在JavaScript中的类名语法中连接字符串?

  16. 16

    创建动态类名时,如何在JavaScript字符串中添加空格?

  17. 17

    如何从实例的字符串名称创建类的实例?

  18. 18

    MVVM:如何在模型类中连接字符串?

  19. 19

    如何在类参数中对字符串排序?

  20. 20

    如何在Moq中模拟字符串类

  21. 21

    如何在Javascript中格式化字符串?

  22. 22

    如何在 Dart 中对函数进行字符串化和解字符串化?

  23. 23

    如何在Javascript中对数组进行字符串化?

  24. 24

    如何在JavaScript中对正则表达式进行子字符串化

  25. 25

    如何在Javascript中访问串联字符串的字符

  26. 26

    Java如何从字符串实例化一个类

  27. 27

    仅当传递的参数是字符串时,如何实例化类?

  28. 28

    涉及多个值/字符串时的类实例化

  29. 29

    Phaser:通过字符串引用实例化类

热门标签

归档