2016-03-19 2 views
0

У меня есть некоторые странные проблемы функция стрелки:`this` не скованный метод прототипа

функция со стрелками, как предполагается, имеет контекст этой оценки, когда в способе-прототипа (ES6 метод класса в данном случае) , но в данном случае 'это' является UNDEF внутри 1-го лямбда

apply(bookings) { 
    if (!bookings.length) { 
     return 
    } 
    bookings.forEach(booking=> { 

    //this is undef here 

     let matchingTimeSlot = this.timeSlots.find(item=>item.bookingDate.isSame(booking.bookingDate)) 
    }) 

apply вызывается из другого класса ES6:

this.days[i].apply(currentDaysBookings);

+0

Покажите нам, как вы называете 'apply', пожалуйста. Я уверен, что '' '' 'undefined' вне функции стрелки. – Bergi

+1

Функции стрелки не должны «привязываться» к чему угодно. Нет, они должны иметь * то же 'this' *, что и их лексическая родительская функция. – Bergi

+0

@Bergi в этой строке 'this' определяется: ' bookings.forEach' – SuperUberDuper

ответ

2

это UNDEF здесь

Пожалуйста, обратите внимание, что ваши отладочные инструменты могут быть вам врет. this на самом деле будет переведено на _this или что-то в этом роде. Вы должны посмотреть на сгенерированный JavaScript. Я могу заверить вас, что он будет иметь _this (или как его зовут), указывающий на правильную вещь.

+0

Хорошо, я заметил, что это правильно, так что ошибка в бабеле? Почему бы ему не перебросить его? Как я должен знать его? – SuperUberDuper

+0

, так что теперь мне нужно изменить свой код с 'this.timeSlots' на' _this.timeSlots', это кажется очень грустным. – SuperUberDuper

+0

да, вы правы, мой отладчик лжет мне) – SuperUberDuper

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