我正在尝试根据声明的类型动态创建对象。这段代码似乎有效,但是我觉得我可能正在为进一步的失败做好准备。

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

//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);
}

09-25 15:29