动态生成自定义类

时间:2018-09-25 02:04:08

标签: javascript

我现在正在编写一个应用程序,该应用程序要求用户能够从预定义的对象列表中选择一个对象类型,或者通过前端系统生成新的同级对象类型。所以有点像下面的例子

`
    class predefinedClass extends someParentClass{
        ...
    }

    //Some user defined class
    class dynamicClass extends someParentClass{
        ...
    }

`

那么有人有生成动态类的经验吗?我有一种预感,功能性方法可能比OOP方法更容易,但我认为值得一试。

1 个答案:

答案 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"
*/

让我知道您是否能想到任何可以改善这一点的方法,但是我想不出一种更好的方法来动态创建自定义类,然后将其推送到静态格式以供以后使用。