Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用扩展运算符将参数分配给ES5构造函数中的新对象?_Javascript_Ecmascript 5 - Fatal编程技术网

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

Javascript 使用扩展运算符将参数分配给ES5构造函数中的新对象?,javascript,ecmascript-5,Javascript,Ecmascript 5,构造函数正在接受具有多个属性的选项对象。如何在不指定每个对象的情况下将它们指定给新创建的对象 这是我失败的尝试 function Client(options) { const defaultOptions = { host: '127.0.0.1', port: 1905, loggerFn: console.log, maxTime: 60000, startFromTransactionId: 1

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

这是我失败的尝试

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];
        }
    }
}

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

您试图在函数中指定此,我认为这是不合法的(请参阅)。但是你试过
Object.assign(这个,{…defaultOptions,…userOptions})
?@SamiHult这是一个很好的答案。你应该这样贴。