从字符串创建对象(动态)

时间:2014-08-29 18:33:37

标签: javascript object

javascript中有没有办法从字符串创建对象?

以下是一个例子:

配置对象:

var formatter = {
    telephone : {
        length : 10,
        formatClass : "telephoneFormatter"
        },
    email : {
        length : 255,
        formatClass : "emailFormatter"
    }
}

在字段创建中,我可以使用以下方法:

function createFormatter(element){
    if(formatter[element].formatClass == "telephoneFormatter"){
        var formatObj = new telephoneFormatter()
    }
    if(formatter[element].formatClass == "emailFormatter"){
        var formatObj = new emailFormatter()
    }
    return formatObj;
}

但我想动态创建一个对象,比如

function createFormatter(element){
    return new formatter[element].formatClass();
}

构造函数不可用作window对象的属性,如#34; Dynamic Instantiation In JavaScript"的解决方案中所示。类文件随页面一起加载,但我无法在chrome中找到对象开发人员的工具。因此我目前没有关于课程的句柄。

为什么我需要这样做?应用程序动态加载表单,并从精心设计的JSON创建字段。在创建表单时,将根据JSON的结构添加验证。我们永远不知道必须在某个字段中添加哪些验证。为了使整个事物复杂化,区域设置的验证是不同的。

能做到吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一个自定义工厂函数来检查configurationObject s formaterClass,然后初始化该类型的类。而不是将配置对象作为构造函数参数传递给初始化对象。

注册可用的类,因此工厂函数不是多条件块。

var formatterClasses = {
    'telephoneFormatter': telephoneFormatter,
    'emailFormatter': emailFormatter
}

function formatterFactory(configurationObject)
{
    return new formatterClasses[configurationObject.formatClass](configurationObject);
}