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

时间:2019-01-29 12:31:15

标签: javascript ecmascript-5

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

这是我失败的尝试

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 个答案:

答案 0 :(得分:5)

使用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 });
}