Почему в данном случае не получается привязать контекст?

261
22 мая 2018, 15:30

К сожалению, не могу продемонстрировать код в работе, так как здесь осуществляется работа с сервером с помощью ajax. Упрощенный пример.

Данный вариант работает:

$('.form').submit(function() { 
 
  var data = { /*...*/ }; 
 
  // Сработает в случае успеха 
  var done = () => console.log(this); // <form></form> 
 
  $.post(vus.ajaxurl, data, done); 
 
  return false; 
});

А этот вариант не работает:

// Сработает в случае успеха 
var done = () => console.log(this); // undefined 
 
$('.form').submit(function() { 
 
  var data = { /*...*/ }; 
 
  $.post(vus.ajaxurl, data, done.bind(this)); 
 
  return false; 
});

Я не могу понять, почему? Я же создаю новую функцию, с помощью bind и привязываю контекст. Почему это не работает?

Answer 1

Проблема заключается в том, что стрелочные функции не имеют контекста this.

Если переписать объявление функции done следующим образом, то должно заработать.

 var done = function(arg) {
     ...
 }
READ ALSO
Реализация scroll

Реализация scroll

Как сделать чтобы скролл доходил точно до того блока с которого выезжал?

214
oncontextmenu, click по элементу и вне его

oncontextmenu, click по элементу и вне его

сижу и думаю, то ли я что то упускаю то ли что происходитесть тестовый параграф

215
Как реализовать передвижение в игре canvas?

Как реализовать передвижение в игре canvas?

Есть canvas,имеющий размеры 800x600px

255
Перевод в мировые координаты

Перевод в мировые координаты

Есть координаты мыши: mousePos , есть матрица view - view, есть матрица перспективной проекции: pMatrixЯ перевожу координаты в мировые: нахожу обратную...

239