Назначить параметры новому объекту в конструкторе ES5 с помощью оператора распространения? - PullRequest
0 голосов
/ 29 января 2019

Конструктор принимает объект параметров с несколькими свойствами.Как я могу назначить их вновь созданному объекту без указания каждого?

Вот моя неудачная попытка

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 голосов
/ 29 января 2019

Использование 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 });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...