2015-10-10 13 views
7

Więc zacząłem używać ES6 w Meteor, ale najwyraźniej jeśli spróbujesz użyć składni z funkcją strzałki, this.userId jest niezdefiniowane, a jeśli użyjesz go z regularne function(){}this.userId działa idealnie, zakładam, że jest to rodzaj procesu transplera, który przypisuje to innym, do userId, ale jest tylko zgadywaniem, czy ktoś wie, co tak naprawdę się dzieje?Funkcja strzałki ES6 zmienia zakres tego w Meteor.publish

Meteor.startup(function() { 
    Meteor.publish("Activities", function() { //with function 
     console.log(this.userId); //TS8vTE3z56LLcaCb5 
    }); 
}); 

Meteor.startup(function() { 
    Meteor.publish("Activities",()=> { //with arrow function 
     console.log(this.userId); //undefined 
    }); 
}); 
+0

Od MDN: * "Wyrażenie funkcja strzałka (znany również jako funkcja tłuszcz strzałka) ma krótszy w porównaniu do składni wyrażeń funkcyjnych oraz ** leksykalnie wiąże' this' wartość ** '* https:. //developer.mozilla .org/pl-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions –

+0

@FelixBadanie, jak to jest duplikatem pytania? – ncubica

+0

Wyjaśnia, w jaki sposób działa "ten" w funkcjach strzałek: –

Odpowiedz

7

To nie jest błąd transpilation, to feature funkcji strzałek. Funkcja strzałki automatycznie ustawia kontekst ciała funkcji na konteksty, w których został utworzony, w tym przypadku wywołanie zwrotne na Meteor.publish. Zapobiega to ponownemu powiązaniu Meteora z kontekstem funkcji słuchacza.

Z Meteor publish docs:

wewnątrz funkcji, to opublikuje uchwytu przedmiotu

Jeśli chcesz rzeczy pracować prawidłowo trzeba będzie użyć funkcji "old-school" składnia, aby umożliwić Meteorrowi prawidłowe ustawienie kontekstu.

+0

To się nazywa "funkcja strzałki", a nie "funkcja fat-arrow" –

+0

Jesteś Zupełnie dobrze :) chociaż za strzałą tłuszczu jest silna potoczna masa, będę aktualizować! Dzięki –

+1

"Wyrażenie funkcji strzałki (zwane także funkcją strzałki tłuszczu) ..." -MDN –

Powiązane problemy