AndrewN1
@AndrewN1

Нужно ли биндить все методы?

Нужно ли делать bind на все методы класса в конструкторе?
class Pet {
  constructor(name="Mister Anon") {
    this.name = name;
    this.sound = this.sound.bind(this);
  }
  
  sound() {
    console.log(`My name is ${this.name}`);
  }
}

let dog = new Pet("Bread");

let method = dog.sound;

method(); // My name is Bread

// а без бинда в конструкторе будет ошибка из-за то что this - undefined
  • Вопрос задан
  • 263 просмотра
Решения вопроса 2
Lynn
@Lynn
nginx, js, css
bind нужен если вы зачем-то хотите вызывать метод отдельно от объекта.
Делать его всегда не нужно, вы просто замедляете выполнение кода (bind далеко не бесплатен) и рассыпаете потенциальные грабли (иногда нужно вызывать методы в конексте других объектов).

И даже если надо bind, то лучше его делать в тот момент когда он реально необходим.

let method = dog.sound.bind(dog);
method();
Ответ написан
@kulaeff
Front-end developer
Да, все верно. Но можно также использовать arrow functions и тогда не придется биндить:

sound = () => {
    console.log(`My name is ${this.name}`);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы