self [action] () - это список или что это?

164
05 июля 2019, 15:40

И если это список, то почему он создаётся как переменная?

И как это работает тогда?

function Menu(elem) { 
  this.save = function() { 
    alert('сохраняю'); 
  }; 
  this.load = function() { 
    alert('загружаю'); 
  }; 
  this.search = function() { 
    alert('ищу'); 
  }; 
 
  var self = this; 
 
  elem.onclick = function(e) { 
    var target = e.target; 
    var action = target.getAttribute('data-action'); 
    if (action) { 
      self[action](); 
    } 
  }; 
} 
 
new Menu(menu);
<div id="menu"> 
  <button data-action="save">Сохранить</button> 
  <button data-action="load">Загрузить</button> 
  <button data-action="search">Поиск</button> 
</div>

Answer 1

Смотрите, к св-ву/методу объекта можно обратиться двумя способами

1 - через точку ( дот нотация )

const a = {
  method: (str) => alert(str),
  prop: 'prop'
}
a.method(a.prop);

2 - через скобки квадратные

const a = {
  method: (str) => alert(str),
  prop: 'prop'
}
a['method'](a['prop']);

Раз во втором варианте используется строчка, то мы эту строку можем сохранить в переменную

const a = {
  method: (str) => alert(str),
  prop: 'prop'
}
const action = 'method';
a[action](a['prop']); // передали именно переменную, которая вернула нужный метод/св-во

В вашем коде как раз это и происходит, getAttribute возвращает значение атрибута в виде строки, которую мы дальше используем, что бы вызвать нужный метод объекта

READ ALSO
Проблема с выполнением task в gulp 4

Проблема с выполнением task в gulp 4

Недавно узнал, что gulp полностью перешел с 3 версии на 4Решил попробовать новую версию с ее новыми возможностями, но тут возникли проблемы при...

125
Vue Не работает фильтр в поле input

Vue Не работает фильтр в поле input

Сделал фильтр для фильтрации ввода чисел, но чего-то не хватаетПодскажите, почему не работает фильтр в поле input

130
Замена слова JavaScript

Замена слова JavaScript

Есть код в котором при нажатии кнопки, слова "атрибут" заменяются на ***Что добавить в эту строку, чтобы заменялись "атрибут" и "Атрибут" слова?

140
&ldquo;Uncaught TypeError: 5 is not a function&rdquo; при присваивании 5 в переменную [закрыт]

“Uncaught TypeError: 5 is not a function” при присваивании 5 в переменную [закрыт]

Почему данный код приводит к возникновению ошибки?

158