@timokins

Есть ли разница в вызове функций?

const a = {
  b: function() {
    // 1 вариант
    a.с();
    // 2 вариант
    this.с();
  },

 c: function() {
  
  }
}


и то, и то приемлемо? или что-то здесь моветон?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
Вам уже ответили выше про подводные камни использования this в методах объектов.
Но правильней использовать именно this. Почему? В случае необходимости изменения имени ссылки на объект или необходимости экспортировать объект как модуль, вам не придется править реализацию методов. Так же, это повышает читаемость. Ну, а в случае если метод надо передать в другое место, используйте bind:
const a = {
  b() {
    this.с();
  },
  c() {
    alert('expected result');
  }
}

const d = {
  b: a.b.bind(a),
  c() {
    alert('wow');
  }
};

d.b(); //  => "expected result"


Короткая форма записи методов объектов более удобна и читаема. Используйте ее в своем коде.
Длиная форма записи:
var obj = {
  a: function() { 
    // do something
  },
  b: function() { 
    // do something
  }
};

Короткая форма записи:
const obj = {
  a() {
    // do something
  },
  b() {
    // do something
  }
};
Ответ написан
Комментировать
youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM
const d = {
  b: a.b,
  c: function() { alert('wow'); }
};

d.b();

Пояснение на всякий случай:
при вызове d.b() будет исполнена та же функция, что записана в a.b(), но this=d.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы