Javascript动态选择构造函数,这是不正确的吗?

标签 javascript object constructor new-operator

我正在尝试根据声明的类型动态创建对象。这段代码似乎有效,但我觉得我可能会让自己在未来遭遇巨大的失败。

我想问题是 - 这是好的代码吗?如果不是,为什么不呢?

//TypeA and TypeB are constuctor functions declared elsewhere which take data objects, omitted here for clarity.
var constructorMapping = { 'typeA': TypeA, 'typeB': TypeB };

function convertToObject( type, dataObject) {
    var selectedConstructor = constructorMapping[type];
        if ( !selectedConstructor ) {
            return false;
        }
        return new selectedConstructor(dataObject);
}

var typeAObject = convertToObject("typeA", {name: "asdf"});

最佳答案

看起来不错,假设所有 TypeA/TypeB/… 构造函数都采用这样的 dataObject 作为参数。

但是,我不会返回false。要么抛出错误,要么返回null。另外,您只需检查 selectedConstructor 是否为真,如果您愿意,您可以使该检查更加严格:

function convertToObject(type, dataObject) {
    if (!constructorMapping.hasOwnProperty(type)) return null;
    var selectedConstructor = constructorMapping[type];
    if (typeof selectedConstructor != "function") return null;
    return new selectedConstructor(dataObject);
}

关于Javascript动态选择构造函数,这是不正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24572150/

相关文章:

Java 基础知识,使用 this 作为构造函数

javascript - 下划线js :How to create a new object by combining values from two objects?

javascript - 有没有办法通过单击按钮从 Spotfire 发送电子邮件?

javascript - 使用键属性显示不同的值

javascript - 为什么更改构造函数调用顺序会导致其出现故障?

C++ 类表达式必须是可修改的左值

javascript - 运行两个不同的 jQuery 函数

javascript - 根据外部ID在javascript中对数组进行排序

javascript - 如何将 jQuery 事件附加到对象的方法?

c++ - 具有构造函数类型转换和转换运算符的转换序列