所以回答我的问题需要一点背景知识。所以我有 4 个不同的基类,在这种情况下,我们就称它们为 A、B、C、D 类。这些类经过测试并证明可以工作。然后我把这些类转换成 JSON 格式,像这样被反对。
A 类
{
"props": {
"name": "Default Name",
"type": "A"
},
"functions": [
{
"name": "hello",
"params": [],
"body": ""
}
]
}
完成这篇文章后,我使用 JSON.parse 方法将其导入到对象字面量中。这使我能够将函数解析为带有下拉菜单的表单字段,以用于人们可以做出的不同逻辑语句。我将其限制为 if/else 条件、相等语句和 return 语句,因为它们是大多数用户需要访问的三大语句,但我添加了一个高级模式,以防我需要编写更自定义的内容。
编辑函数的属性后,你会得到这样的东西。
A 类已编辑
{
"props": {
"name": "Default Name",
"type": "A_Edited"
},
"functions": [
{
"name": "hello",
"params": ["name"],
"body": "return `Hello, ${this.props.name}, my name is ${name}!`;"
}
]
}
从预先存在的“类”创建这个新的“类”后,您可以使用 javascript 扩展运算符创建该类的新实例并将其包装在花括号中。
但是如何从基于文本的函数转变为绑定到新类的实际函数呢?这是一个简单但有效的解决方案。
类工厂
function ClassFactory(class){
class.functions.forEach((funct)=>{
var temporaryFunction = new Function(funct.params, funct.body);
class[funct.name] = temporaryFunction.bind(class);
})
return class;
}
JavaScript 有一个 Function 对象,它有两个参数。函数参数和该函数的主体。这个脚本正在做的是获取新创建的函数,并将其绑定到类中的一个新属性,该属性以原始函数命名。将函数绑定到该类后,然后将其返回并瞧!你有一个类具有可以使用的实时函数。
所以下面写了一个有效的例子
var AEdited = ClassFactory(JSON.parse("/path/AEdited.json"));
var AEditedInstance = {...AEdited};
AEditedInstance.name = "Frank"
console.log(AEditedInstance.hello("Sam"));
/*
This would log "Hello Frank, I'm Sam"
*/
如果您能想到任何可以改进这一点的方法,请告诉我,但我想不出更好的方法来动态创建自定义类,然后将它们推送到静态格式以供以后使用。