代码之家  ›  专栏  ›  技术社区  ›  user1283776

使用扩展运算符将参数分配给ES5构造函数中的新对象?

  •  3
  • user1283776  · 技术社区  · 7 年前

    构造函数正在接受具有多个属性的选项对象。如何在不指定每个对象的情况下将它们指定给新创建的对象?

    function Client(options) {
        const defaultOptions = { 
            host: '127.0.0.1',
            port: 1905,
            loggerFn: console.log,
            maxTime: 60000, 
            startFromTransactionId: 1 
        };
        this = { ...defaultOptions, ...userOptions, ...this }
    }
    

    ReferenceError:赋值中的左侧无效

    我认为这是可行的,但我希望有一个更简单的解决方案,使用扩展运算符

    function Client(options) {
        const defaultOptions = { 
            host: '127.0.0.1',
            port: 1905,
            loggerFn: console.log,
            maxTime: 60000, 
            startFromTransactionId: 1 
        };
    
        for (prop in defaultOptions) {
            if (defaultOptions.hasOwnProperty(prop)) {
                this[prop] = options[prop] ? options[prop] : defaultOptions[prop];
            }
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   Sami Hult    7 年前

    使用 Object.assign

    function Client(userOptions) {
        const defaultOptions = { 
            host: '127.0.0.1',
            port: 1905,
            loggerFn: console.log,
            maxTime: 60000, 
            startFromTransactionId: 1 
        };
        Object.assign(this, { ...defaultOptions, ...userOptions });
    }