Я не понимаю использования оператора распространения с мангустом

#javascript #node.js #ecmascript-6

#javascript #node.js #ecmascript-6

Вопрос:

Я не понимаю использования оператора распространения в следующем коде :

 exports.create = (req, res, next) => {
    const itemObject = JSON.parse(req.body.item);
    const item = new Item({
        ...itemObject,
        name: 'test' 
    });
};
 

Я пытался написать itemObject вместо ...itemObject , но это не работает. Почему вы должны создавать копию объекта с помощью оператора распространения, чтобы это работало?

Спасибо за вашу помощь

Комментарии:

1. Объект, который вы получаете, JSON.parse() является простым объектом JavaScript. Использование синтаксиса распространения (это не оператор) копирует свойства из этого объекта и делает их доступными для конструктора элемента. Таким образом, вы получаете экземпляр элемента, содержащий нужные свойства.

2. Оператор распространения превращается [1,2,3,4,5,6] в аргументы, подобные функциям 1 2 3 4 5 6 , например. Обычно я использую его для превращения объектов, похожих на массивы, в массивы. Нравится [...document.querySelectorAll('p')] . Если у вас есть какие-либо другие вопросы по этому поводу, дайте мне пинг.

3. синтаксис распространения @quicVO может это сделать, но в данном случае это не то, что происходит. Свойства декодированного объекта копируются один за другим в новый объект, передаваемый конструктору элемента.

4. Это фактически то же itemObject.name = 'test' самое, что и последующее выполнение new Item(itemObject)

5. @quicVO Но никто, кроме вас, не думает о литерале объекта как о функции с аргументами.

Ответ №1:

Потому что, если вы не распространяете его, вы создаете свойство и значение «itemObject». Вы эффективно делаете это:

 const item = new Item({
  itemObject: itemObject,
  name: 'test'
});