Как я могу использовать параметры по умолчанию, если при создании нового объекта не передается никакого значения? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь передать параметры в новый конструктор класса, и параметры по умолчанию рассчитываются, если аргументы не передаются, хотя по-прежнему есть возможность передачи любого параметра по имени аргумента.

class thing{
 constructor({a = 0, b = 0}) { 
  if(a == 0){this.a= func();}
  else {this.a = a;}
  if(b == 0){this.b= func();
  else {this.b = b;}
}
var defaultThing = new thing(); // returns Cannot destructure property `a` of 'undefined' or 'null'. 
var parametersThing = new thing({b:20}); // returns {a = 0, b = 20}

проблема заключается в том, что при отсутствии параметров возвращается ошибка Cannot destructure property `a` of 'undefined' or 'null'..

Как я могу использовать параметры по умолчанию и все еще иметь возможность использовать параметры без появления этой ошибки?

1 Ответ

3 голосов
/ 22 февраля 2020

В своей подписи конструктора вы указали значения по умолчанию для деструктуризации, когда свойства не существуют для полученного параметра, но нет параметра по умолчанию. Чтобы сделать это, вы добавляете параметр по умолчанию:

//                         vvvv−−− default parameter value
constructor({a = 0, b = 0} = {}) {
//             ^^^−−−−^^^−−−−−−−−− destructuring defaults
    // ...

Если вы вызываете его без аргументов, значение параметра по умолчанию ({}) вступает в силу, а затем включаются настройки по умолчанию, потому что {} объект не имеет a или b.

...