我现在正在编写一个应用程序,该应用程序要求用户能够从预定义的对象列表中选择一个对象类型,或者通过前端系统生成新的同级对象类型。所以有点像下面的例子
`
class predefinedClass extends someParentClass{
...
}
//Some user defined class
class dynamicClass extends someParentClass{
...
}
`
那么有人有生成动态类的经验吗?我有一种预感,功能性方法可能比OOP方法更容易,但我认为值得一试。
答案 0 :(得分:1)
所以我的问题的答案需要一点背景知识。因此,我有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"
*/
让我知道您是否能想到任何可以改善这一点的方法,但是我想不出一种更好的方法来动态创建自定义类,然后将其推送到静态格式以供以后使用。