javascript - 加载存储在数据库中的 javascript 类
问题描述
我有一个使用 webpack 的反应应用程序。在我的应用程序中,我允许用户用他们自己的自定义行为覆盖默认行为。
例如,假设应用程序有一个按钮,当单击该按钮时会向用户发出一条消息,并且该用户宁愿不被警告框惹恼,他们宁愿它是一个 console.log 语句。在管理控制台中,他们将上传一个类,该类必须有一个名为 exec() 的方法。然后他们将单击按钮(在管理控制台中)并将其 onClick 功能更改为他们自定义类的名称。
目前,当他们上传文件时,在检查以确保它是具有 exec 方法的有效 js 类之后,该类作为文本存储在数据库中。
我想要的是,当应用程序启动时,应用程序会读取所有类并将它们存储为映射,并以它们的名称作为键。我可以从数据库中检索类(作为文本)我怎样才能把它变成一个对象?
编辑添加的代码这里是一个示例类
class CustomClass {
exec(params) {
console.log('you are in a custom class');
}
}
获取自定义类
const apiUrl = 'https://api.example.com/customClasses';
fetch(apiUrl)
.then((response) => response.json())
.then((data) => console.log(data));
这将给出一个看起来像的 json
{
"CustomClass": "class CustomClass {\r\n\r\n exec(params) {\r\n console.log(\"you are in a custom class\");\r\n }\r\n}",
"CustomClass2": "class CustomClass2 {\r\n\r\n exec(params) {\r\n console.log(\"you are in a custom class2\");\r\n }\r\n}"
}
解决方案
所以,事实证明你可以使用eval
括号,如此处所示
let userClasses = {
"CustomClass": "class CustomClass {\r\n\r\n exec(params) {\r\n console.log(\"you are in a custom class\");\r\n }\r\n}",
"CustomClass2": "class CustomClass2 {\r\n\r\n exec(params) {\r\n console.log(\"you are in a custom class2\");\r\n }\r\n}"
}
for (const userClassName in userClasses) {
const userClass = eval(`(${userClasses[userClassName]})`);
let userClassObject = new userClass();
userClassObject.exec();
}
这会解决你的问题吗?
推荐阅读
- python - Django 不通过 smtp 发送电子邮件
- solidity - 如何将数据永久存储在 Solidity 智能合约中?
- javascript - Icon 和 TextInput 不在同一行显示
- javascript - 使用计数器的幻灯片 Javascript 淡入淡出功能
- node.js - 如何从 afterUpsert 钩子中获取更新后的续集模型的实例?
- css - 如何消除 MailChimp ul 中的子弹
- node.js - 处理在 NodeJS、Express 中以类似方式开始的不同路由
- ios - 快速将 BLE 特征值转换为字符串
- mongodb - Mongodb仅返回数组中的匹配元素
- python-3.x - python glob.glob 不再工作,返回一个空列表