Я не могу понять, почему после деструктивного назначения items
prop не равны Gorilla
.
Он будет использоваться после удаления основных items: "Piggi"
в параметрах объекта происхождения. Я не понимаю почему...
'use strict';
let options = {
size: 100,
items: "Piggi"
}
let { title="Menu", items:w="Gorilla", size } = options;
let a = title;
let b = w;
console.log(a + " - " + b); // must be "Menu - Gorilla"
В объявлении деструкции с инициализацией здесь:
let { items:w = "Gorilla" } = options;
синтаксис означает объявить переменную с именем "w", значение которой должно быть инициализировано значением значения, называемого "items" в объекте, на которое ссылаются "параметры", или если такого свойства нет в строке "Gorilla",,
В этом случае переменная "w" инициализируется значением свойства "items" в исходном объекте.
Если вы не хотите принимать значение из исходного объекта, не делайте этого:
let w = "Gorilla";
let
или var
.
Когда вы анализируете код, вы получаете здесь три метода:
{ foo, bar }
за
{ foo: foo, bar: bar}
{ foo = 42 }
который
{ foo: foo = 42 }
изменение цели в шаблоне назначения объектов Object [You Do not Know JS: ES6 & Beyond, Chapter 2: Syntax]:
Синтаксический шаблон здесь -
source: target
(илиvalue: variable-alias
).
{ foo: bar }
Синтез - это новая цель w
для старых items
свойств со значением по умолчанию 'Gorilla'
.
let options = {
size: 100,
items: "Piggi"
}
let { title="Menu", items:w="Gorilla", size } = options;
let a = title;
let b = w;
console.log(a + " - " + b);
Решение. Проблема в том, что мы переписываем глобальный объект. поэтому у вас есть титиле как меню, но у объекта option нет свойства тита. Таким образом, когда вы назначаете глобальный объект с параметром, у него все еще есть элементы как "piggi" плюс вы не можете назначить такой объект, вам нужно переназначить каждое свойство в javascript. Надеюсь, ты получил свой ответ.
let { title="Menu", items:w="Gorilla", size } = options;
Может быть, вы называете это переназначение ...