2016-08-24 6 views
0

Я думал, что функция стрелок «просто» является ярлыком для антонимусных функций, поэтому я использовал его довольно много. Однако недавно я столкнулся с примером того, что функция стрелок вызвала некоторые проблемы. Вот пример кода:ES6, функция стрелки, контекст «this»

function refreshTable() { 
    $.ajax({ 
    url: root + `/posts?userId=${userId}`, 
    method: 'GET' 
    }).then(function(data) { 

    for (var item of data) { 
     $('table.list tbody').append(` 
      <tr> 
       <td>${item.id}</td> 
       <td>${item.title}</td> 
       <td>${item.date}</td> 
       <td> 
       <a href="" data-id="${item.id}" class="getDetails">View</a> | 
       <a href="" data-id="${item.id}" class="getDetails">Delete</a> 
       </td> 
      </tr> 
      `); 
    } 

    $('.getDetails').click((e) => { 
    // $(this) is actually the ajax call, I can't access the "data" part 
    }); 

    }); 
} 

Однако, это работает:

function refreshTable() { 
    $.ajax({ 
    url: root + `/posts?userId=${userId}`, 
    method: 'GET' 
    }).then(function(data) { 

    for (var item of data) { 
     $('table.list tbody').append(` 
      <tr> 
       <td>${item.id}</td> 
       <td>${item.title}</td> 
       <td>${item.date}</td> 
       <td> 
       <a href="" data-id="${item.id}" class="getDetails">View</a> | 
       <a href="" data-id="${item.id}" class="getDetails">Delete</a> 
       </td> 
      </tr> 
      `); 
    } 

    $('.getDetails').click(function(e) { 
    // $(this) is the HTML element, so I can access "data" 
    }); 

    }); 
} 

Очевидно, что есть некоторая логика стрелка функции, она создает различные возможности для this. Так, что происходит? Могу ли я получить то же самое со стрелкой (для доступа к HTML) или это невозможно в этом случае?

Спасибо!

+1

Возможный дубликат [Functions Стрелки и об этом] (http://stackoverflow.com/questions/28798330/arrow-functions- и-это) –

+0

Возможный дубликат [Что значит «=>» (стрелка, образованная из равных & больше) в JavaScript?] (http://stackoverflow.com/questions/24900875/whats-the-meaning- из-ан-стрелка-форма ed-from-equals-more-than-in-javas) –

+1

У кого-то плохой день? Доводя хорошие ответы, не оставляя комментариев.Если это стратегические downvotes ... ну, если это так много значит для вас :) – Michelangelo

ответ

0

Ну, вы точно знаете, что делает функция стрелки. Он принимает this из лексической или родительской области. http://exploringjs.com/es6/ch_arrow-functions.html

Во-вторых, их это взято из окрестностей (лексическое). Поэтому вам больше не требуется bind() или this = this.

Да, вы можете заставить его работать, но вам нужно поместить элемент HTML вне функции щелчка. Затем вы можете использовать this внутри функции и не иметь проблемы с использованием своего собственного this.

1

Могу ли я достичь той же функции со стрелкой (для доступа к HTML) или это невозможно в этом случае?

Вы можете использовать функцию стрелки, но вы не можете использовать this. Вы можете обратиться к элементу обработчик связан с помощью объекта события: e.currentTarget

Это свойство обычно равна this функции.


Итак, что происходит?

См:

Смежные вопросы