首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态生成自定义类

问动态生成自定义类
EN

Stack Overflow用户
提问于 2018-09-25 02:04:07
回答 1查看 113关注 0票数 4

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

代码语言:javascript
复制
`
    class predefinedClass extends someParentClass{
        ...
    }

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

`

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 20:34:38

因此,我的问题的答案需要一些背景知识。所以我有4个不同的基类,在这个例子中,让我们把它们称为A,B,C,D类,这些类经过测试并被证明是有效的。然后,我选择了这些类,并将它们转换为这样的JSON反对。

A类

代码语言:javascript
复制
 {
        "props": {
            "name": "Default Name",
            "type": "A"
        },
        "functions": [
            {
                "name": "hello",
                "params": [],
                "body": ""
            }
        ]
}

完成这部分之后,我使用JSON.parse方法将其导入到一个对象文本中。这使我能够将函数解析为表单字段,并为不同的逻辑语句提供下拉菜单。我将其限制在if/ but条件语句、相等语句和返回语句上,因为这些语句是大多数用户需要访问的最大的三种语句,但我添加了一个预先模式,以防需要编写更自定义的内容。

在编辑函数的属性之后,您将得到类似的内容。

类A编辑

代码语言:javascript
复制
 {
        "props": {
            "name": "Default Name",
            "type": "A_Edited"
        },
        "functions": [
            {
                "name": "hello",
                "params": ["name"],
                "body": "return `Hello, ${this.props.name}, my name is ${name}!`;"
            }
        ]
}

在从预先存在的“类”创建了这个新的“类”之后,您可以使用javascript操作符并用大括号包装这个类的新实例。

但是,如何从基于文本的函数变为绑定到新类的实际函数呢?这是简单而有效的解决办法。类工厂

代码语言: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有一个函数对象,它有两个参数。函数参数和该函数的主体。这个脚本要做的是,接受这个新创建的函数,并将其绑定到类中的一个新属性,该属性以原始函数的名称命名。在函数绑定到该类之后,它将被返回并查看!您有一个类,它具有可以使用的活动函数。

所以下面写了一个有效的例子

代码语言:javascript
复制
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"
*/

请告诉我,如果您能想出任何可以改进这一点的方法,但我想不出更好的方法来动态创建自定义类,然后将它们推送到静态格式以供以后使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52489601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档