Аргументы конструктора класса ES6

Я рассматриваю определение класса ES6 и не понимаю аргументы конструктору. Здесь класс:

export class Modal {
    constructor($modal, {size = null,} = {}) {
        // stuff
    }
}

Я смущен этим {size = null,} = {}. Это единственный аргумент? Что это значит?

Ответ 1

Это деструкция объекта с заданным значением по умолчанию.

Если вы передаете obj как

{ size: true }

вы можете получить доступ к "размеру" внутри конструктора, как обычная переменная

export class Modal {
  constructor($modal, {size = null } = {}) {
    console.log(size); // prints the size value from the given object
  }
}

Если вы ничего не передадите или передаете объект без "размера", размер будет равен нулю. Вы можете сделать больше таких назначений. Просто разделите их запятыми.

Пример:

constructor($modal, { size = null, foo, bar = "test" } = {})

В этом случае, если вы передадите объект без свойства "foo", он будет undefined, остальное будет действовать, как я упоминал выше.

Также стоит упомянуть, что вам нужно добавить = {} в конце назначения деструктуризации в объявлении constructor. Это в случае, если вы ничего не пропускаете. В противном случае вам придется передать некоторый объект (может быть пустым).