如何将代码作为字符串评估为 javascript 中的 class 名称?
How to eval code as string to class name in javascript?
我正在尝试反序列化包含 class 名称的 URL 参数,然后针对该 class.
测试现有对象
我想我可以用这样的 eval
检索实际的 class
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);
但是 eval
抛出:
Uncaught ReferenceError: MyClass is not defined
确实,当我在eval
行下断点时,我的业务class没有定义。
我的猜测是,导入并没有真正导入 classes,因为它仅用于在编译之前检查类型。
我该怎么办?
您可以只检查构造函数名称:
x.constructor.name === this.route.snapshot.queryParams['type']
作为奖励,这会降低您用户的安全风险(您用户的浏览器不会计算随机字符串,该字符串可能已经在例如 link 邮件中给出)。
在 URL 中传递未过滤的代码引用听起来仍然不是一个好主意:如果实际的 class 名称发生变化怎么办?
我正在尝试反序列化包含 class 名称的 URL 参数,然后针对该 class.
测试现有对象我想我可以用这样的 eval
检索实际的 class
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);
但是 eval
抛出:
Uncaught ReferenceError: MyClass is not defined
确实,当我在eval
行下断点时,我的业务class没有定义。
我的猜测是,导入并没有真正导入 classes,因为它仅用于在编译之前检查类型。
我该怎么办?
您可以只检查构造函数名称:
x.constructor.name === this.route.snapshot.queryParams['type']
作为奖励,这会降低您用户的安全风险(您用户的浏览器不会计算随机字符串,该字符串可能已经在例如 link 邮件中给出)。
在 URL 中传递未过滤的代码引用听起来仍然不是一个好主意:如果实际的 class 名称发生变化怎么办?