ZdraviiSmisl
@ZdraviiSmisl

Зачем 2 операнда записаны в переменную?

А зачем тут в переменную записывать 2 этих операндаvar handlers = this._eventHandlers && this._eventHandlers[eventName];почему не достаточно только название свойства,или это для того сделано что вдруг функции которые нужно удалить.. записались ещё куда-нибудь в объект?
Примесь eventMixin, реализующая события:
Примесь eventMixin, реализующая события:

var eventMixin = {

  /**
   * Подписка на событие
   * Использование:
   *  menu.on('select', function(item) { ... }
   */
  on: function(eventName, handler) {
    if (!this._eventHandlers) this._eventHandlers = {};
    if (!this._eventHandlers[eventName]) {
      this._eventHandlers[eventName] = [];
    }
    this._eventHandlers[eventName].push(handler);
  },

  /**
   * Прекращение подписки
   *  menu.off('select',  handler)
   */
  off: function(eventName, handler) {
    var handlers = this._eventHandlers && this._eventHandlers[eventName];
    if (!handlers) return;
    for(var i=0; i<handlers.length; i++) {
      if (handlers[i] == handler) {
        handlers.splice(i--, 1);
      }
    }
  },

  /**
   * Генерация события с передачей данных
   *  this.trigger('select', item);
   */
  trigger: function(eventName /*, ... */) {

    if (!this._eventHandlers || !this._eventHandlers[eventName]) {
      return; // обработчиков для события нет
    }

    // вызвать обработчики
    var handlers = this._eventHandlers[eventName];
    for (var i = 0; i < handlers.length; i++) {
      handlers[i].apply(this, [].slice.call(arguments, 1));
    }

  }
};

Здесь есть три метода:

.on(имя события, функция) – назначает функцию к выполнению при наступлении события с данным именем. Такие функции хранятся в защищённом свойстве объекта _eventHandlers.
.off(имя события, функция) – удаляет функцию из списка предназначенных к выполнению.
.trigger(имя события, аргументы) – генерирует событие, при этом вызываются все назначенные на него функции, и им передаются аргументы.
  • Вопрос задан
  • 169 просмотров
Решения вопроса 2
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Простая проверка на наличие объекта для получения свойства объекта, если он есть. В handlers будет массив обработчиков для указанного события, при его наличии, либо undefined.
Ответ написан
Комментировать
@abberati
frontend-разработчик
Если левый аргумент – false, оператор И возвращает его и заканчивает вычисления. Иначе – вычисляет и возвращает правый аргумент.


https://learn.javascript.ru/logical-ops#i
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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