2016-07-05 12 views
5

Z powodu dużej różnicy między różnicą między normalną a funkcją strzałki ES6 chciałbym być w stanie dowiedzieć się, który z nich został odebrany przez callback fn.Sprawdź, czy funkcja oddzwaniania jest strzałką ES6.

typeof będzie returnfunction dla obu. Czy istnieje sposób na rozróżnienie?

+3

Nie rób tego, jeśli projektujesz interfejs API, powinien on działać zgodnie z obydwoma. Pomyśl o kodowaniu refaktoryzującym użytkowników, czy realistycznie spodziewałbyś się, że sygnatura funkcji zmieni się na podstawie przekazanej funkcji? Wolałbym nie. Należy również pamiętać, że każda metoda wykrywania prawdopodobnie zawiodłaby dzięki transponowanym funkcjom strzałek, więc kod zmieniałby zachowanie w zależności od środowiska, w którym działał. – loganfsmyth

+0

Dlaczego chcesz być w stanie odróżnić? –

+0

Nie ma absolutnie żadnej różnicy dla odbiornika wywołania zwrotnego. Możesz po prostu wywołać wszystkie rodzaje wywołań zwrotnych. – Bergi

Odpowiedz

6

Funkcje strzałek nie mogą być używane jako konstruktorzy i pokazują typeof arrowFunc.prototype jako undefined, natomiast funkcja bez strzałki pokazuje "obiekt".

+0

Potwierdzono, że działa na Chromebooku Chrome 51.0.2704.103 z 'x = function() {return 1;}; y = (() => 1); console.log (typeof x.prototype, typeof y.prototype); 'yielding' object, undefined' – Paul

+0

Powraca "object" dla obu, w [tym skrzypku] (http://www.es6fiddle.net/iqa214ua/) . – daniloprates

+0

hmmm Myślę, że nie zadziała na Babelu, ponieważ kompiluje się z normalnymi funkcjami:/ale dzięki za rozwiązanie, wydaje się być najlepszym sposobem, gdy kompilator nie jest problemem. – daniloprates

2

Można użyć Function.toString(), aby zwrócić ciąg znaków przedstawiający kod źródłowy funkcji, a następnie wyszukać w łańcuchu strzałkę (=>).

var arrowFunc = x => 2 * x 
var regFunc = function (x) {return 2 * x} 

arrowFunc.toString().indexOf("=>") // 2 
regFunc.toString().indexOf("=>") // -1 
+0

nie wykryłby funkcji bez strzałki z zagnieżdżoną funkcją strzałki lub domyślnej wartości parametru funkcji strzałki jako strzałki funkcjonować? – traktor53

+0

Sądzę, że wykryłoby zagnieżdżoną funkcję strzałki, której można by zapobiec, oceniając zwrot 'indexOf' w niektórych przypadkach. Nie jesteś pewien co do domyślnej wartości parametru, ale nie używają one znaku "=>"? –

+0

Tylko jeśli domyślną wartością jest funkcja i zdefiniowana w linii jako funkcja strzałki ... – traktor53