0
<div class="parent">
  <a class="child" id="child">Child</a>
</div>

<div class="parent2">
  <a class="child2" id="child2">Child with argument</a>
</div>

child.addEventListener('click', Handling);
child2.addEventListener('click', Handling(3));

function Handling(arg) {
var _this = this;
  if (_this.parentElement) {
    alert(_this.parentElement);
  }
  else {alert("no parent, arg="+arg);}
}

https://jsfiddle.net/Nata_Hamster/o7xf5j9s/

Если вызывать функцию Handling без аргумента, родитель возвращается. При попытке вызывать с аргументом он теряется.

Natalya
  • 681
  • 1
    У вас во втором хендлере undefined лежит так-то. Нажмёте на кнопку, получите ошибку – Yugofx May 18 '20 at 21:51

1 Answers1

2

В первом случае вы правильно устанавливаете функцию на клик. Во втором случае вы устанавливаете на клик результат этой функции, то есть undefined. Поэтому при попытке ее вызвать, вы получите TypeError. Хотите вызвать коллбек с аргументом, используйте Handling.bind(child2, 3). Это создаст новую функцию с установленным в первом аргументе контекстом, а остальное - это как раз параметры вашей функции.

Yugofx
  • 1,833
  • Omg, я и сам забыл, что в bind можно передавать не только this, но и аргументы, с которыми функция будет вызываться. Спасибо, действительно, хороший ответ – Anynomius May 18 '20 at 22:04