Создать значение по умолчанию в функции конструктора, если аргумент не передан - javascript - PullRequest
1 голос
/ 03 августа 2020

У меня есть следующее:

class example {
   constructor (arg) {
      this.value = arg.value
   }
   print () {
      console.log(this.value);
   }
}

var new_example = new example  ({
   value: 12,
})

new_example.print();

Как мне установить значение по умолчанию, где, скажем, value = 10, чтобы, если аргумент не был указан, он печатал 10. То есть:

var newer_example = new example ({
})

Я пробовал такие вещи, как:

class example {
   constructor (arg) {
      this.value = (arg.value || 10)
   }
   print () {
      console.log(this.value);
   }
}

И:

class example {
   constructor (arg) {
      this.value = ("undefined" != arg.value || 10)
   }
   print () {
      console.log(this.value);
   }
}

Но не могу найти ничего, что работает.

Ответы [ 4 ]

2 голосов
/ 03 августа 2020

Вы можете использовать значения по умолчанию для аргументов, и вы можете использовать деструктуризацию с дальнейшими значениями по умолчанию для свойств объекта, чтобы поддерживать как new example(), так и new example({}):

class example {
   constructor ({ value = 10 } = {}) {
      this.value = value
      // Note: You could also use Object.assign(this, { value }) which
      // can become useful once you have more values in your object
   }
   print () {
      console.log(this.value);
   }
}
0 голосов
/ 03 августа 2020
class example {
   constructor (arg) {
      this.value = (arg.value || 10)
   }
   print () {
      console.log(this.value);
   }
}

У меня работает этот код. Я думаю, ваша проблема в шестой строке console.log(value), это должно быть console.log(this.value) (вы забыли this.). Распространенная ошибка!

0 голосов
/ 03 августа 2020

Вы можете использовать деструкцию объекта для чистого аккуратного кода

Вы можете попробовать эти несколько разъяснений,

в методе печати, это должно быть this.value, а не value, поскольку его нет в области видимости,

class example {
       constructor (arg = {['value']:3}) {
          this.value = arg.value
       }
       print () {
          console.log(this.value);
       }
    }
    a=new example()
    console.log(`AND NOW`)
    a.print()
0 голосов
/ 03 августа 2020

Вы можете использовать встроенный arguments и проверять так:

class example {
  constructor(arg) {
    this.value = arguments.length > 0 ? arg.value : 10;
  }
  print() {
    console.log(this.value);
  }
}

new example().print();
new example({ value: 12 }).print();
new example({ value: false }).print();
new example({ value: '' }).print();

Вы также можете (близко к тому, что у вас было), проверить, что arg определено:

class example {
  constructor(arg) {
    if (arg && typeof arg.value !== "undefined") {
      this.value = arg.value;
    } else {
      this.value = 10;
    }
  }
  print() {
    console.log(this.value);
  }
}

new example().print();
new example({ value: 12 }).print();

Или, если все ложные значения не нужны, вы можете сделать это с сокращением:

class example {
  constructor(arg) {
    this.value = (arg && typeof arg.value === 'number') ? arg.value : 10;
  }
  print() {
    console.log(this.value);
  }
}

new example().print();
new example({ value: 12 }).print();
new example({ value: 0 }).print();
new example({ value: false }).print(); //value false is lost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...