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

Javascript selecting constructor dynamically, is this incorrect?

本文关键字:不正确 动态 选择 构造函数 Javascript      更新时间:2023-09-26

我正在尝试根据声明的类型动态创建对象。这段代码似乎工作,但我觉得我可能会设置自己为一个壮观的失败进一步的线路。

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

//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 s作为它们的参数。

然而,我不会返回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);
}