#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'
});