Funkcje strzałkowe nie są przeznaczone do użytku w każdej sytuacji, a jedynie jako krótsza wersja staromodnych funkcji. Nie mają na celu zastąpienia składni funkcji za pomocą functionsłowa kluczowego. Najczęstszym przypadkiem użycia funkcji strzałkowych są krótkie „lambdy”, które nie zmieniają definicji this, często używane podczas przekazywania funkcji jako wywołania zwrotnego do jakiejś funkcji.
Funkcji strzałkowych nie można używać do pisania metod obiektowych, ponieważ, jak już zauważyłeś, ponieważ funkcje strzałkowe zamykają się nad thiskontekstem obejmującym leksykalnie, thiswewnątrz strzałki jest to, które było aktualne w miejscu zdefiniowania obiektu. To znaczy:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
W twoim przypadku chcąc napisać metodę na obiekcie, powinieneś po prostu użyć tradycyjnej functionskładni lub składni metody wprowadzonej w ES6:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(Są między nimi niewielkie różnice, ale są one ważne tylko wtedy, gdy używasz programu superw programie getOwner, którego nie jesteś, lub kopiujesz getOwnerdo innego obiektu).
Na liście mailingowej es6 odbyła się debata na temat zmiany w funkcjach strzałek, które mają podobną składnię, ale mają własną this. Jednak ta propozycja została źle przyjęta, ponieważ jest to zwykły cukier składniowy, pozwalający ludziom zaoszczędzić na wpisywaniu kilku znaków i nie zapewnia nowej funkcjonalności w stosunku do istniejącej składni funkcji. Zobacz temat niezwiązane funkcje strzałek .
thisinaczej. Jest definiowana przez środowisko leksykalne, w którym została utworzona funkcja, co oznacza, żethiswartość, w której utworzyszchopperzmienną, będziethiswartością funkcji. Innymi słowy, nie będzie odnosić się dochopperobiektu.