@timokins

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

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

 c: function() {
  
  }
}


и то, и то приемлемо? или что-то здесь моветон?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 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.
    Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы