【问题标题】:Javascript selecting constructor dynamically, is this incorrect?Javascript动态选择构造函数,这是不正确的吗?
【发布时间】:2014-08-25 15:59:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript object constructor new-operator


    【解决方案1】:

    看起来不错,假设您所有的 TypeA/TypeB/... 构造函数都将此类 dataObjects 作为参数。

    但是,我不会返回 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 中的错误,主要是我只是尽量避免在控制台中抛出类型错误。
    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2011-05-18
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多