代码之家  ›  专栏  ›  技术社区  ›  Guerric P

如何在javascript中将代码作为字符串求值到类名?

  •  0
  • Guerric P  · 技术社区  · 6 年前

    我正在尝试反序列化包含类名的URL参数,然后针对该类测试现有对象。

    eval 这样地

    let type = eval(this.route.snapshot.queryParams['type']);
    let id = +this.route.snapshot.queryParams['type'];
    
    this.selectedResult = this.data.find(x => x.constructor === type && x.id === id);
    

    但是 评估 抛出:

    未捕获的引用错误:未定义MyClass

    事实上,当我在 行,我的业务类没有定义。

    我的猜测是,导入并不真正导入类,因为它只用于在编译之前检查类型。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Denys Séguret    6 年前

    x.constructor.name === this.route.snapshot.queryParams['type']
    

    作为一个额外的好处,这将减少用户的安全风险(用户的浏览器没有评估随机字符串,例如邮件中的链接)。

    在URL中传递未过滤的代码引用听起来仍然不是一个好主意:如果实际的类名改变了怎么办?