Chciałbym wywołać funkcję przy użyciu tablicy jako parametrów:
const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it
function call_me (param0, param1, param2 ) {
// ...
}
Czy istnieje lepszy sposób przekazywania treści od x
do call_me()
?
javascript
arrays
function
call
Robert
źródło
źródło
Dlaczego nie przekazujesz całej tablicy i nie przetwarzasz jej w razie potrzeby wewnątrz funkcji?
źródło
call_me
funkcji. Na końcu brakuje mu średnika.Zakładając, że call_me jest funkcją globalną, więc nie oczekujesz, że zostanie to ustawione.
źródło
W standardzie ES6 jest nowy operator rozprzestrzeniania,
...
który właśnie to robi.Jest obsługiwany przez wszystkie główne przeglądarki oprócz IE.
Operator rozprzestrzeniania może zrobić wiele innych przydatnych rzeczy, a powiązana dokumentacja naprawdę dobrze to pokazuje.
źródło
Jak odpowiedział @KaptajnKold
Nie musisz też definiować wszystkich parametrów dla funkcji call_me. Możesz po prostu użyć
arguments
źródło
Zauważ to
// ---------------------------
strona HTML
może wywoływać funkcję z dowolnymi argumentami
lub
źródło
Argumentami funkcji mogą być również tablice:
oczywiście można również użyć spread :
źródło
Korzystając z operatora rozkładania, musimy zauważyć, że musi to być ostatni lub jedyny przekazany parametr. W przeciwnym razie zawiedzie.
Jeśli potrzebujesz przekazać tablicę jako argument początkowy, możesz:
źródło
możesz użyć operatora spreadu w bardziej podstawowej formie
w przypadku funkcji, które zwracają tablice, ale powinny przejść jako argumenty
Przykład:
źródło
Odpowiedź była już udzielona, ale chcę tylko dać bułkę z masłem. To, co chcesz osiągnąć, nazywa się
method borrowing
w kontekście JS, gdy pobieramy metodę z obiektu i wywołujemy ją w kontekście innego obiektu. Dość powszechne jest stosowanie metod tablicowych i stosowanie ich do argumentów. Dam ci przykład.Mamy więc funkcję „super” mieszającą, która przyjmuje jako argument dwie liczby i zwraca ciąg „super bezpieczny”:
Jak dotąd tak dobrze, ale nie mamy problemu z powyższym podejściem, jest ono ograniczone, działa tylko z dwiema liczbami, co nie jest dynamiczne, zróbmy to z dowolną liczbą i dodatkowo nie musisz przechodzić przez tablicę (możesz jeśli nadal nalegasz). Ok, dość gadania, walczmy!
Naturalnym rozwiązaniem byłoby zastosowanie
arr.join
metody:O stary. Niestety to nie zadziała. Ponieważ nazywamy skrót (argumenty), a obiekt argumentów jest iterowalny i podobny do tablicy, ale nie jest prawdziwą tablicą. Co powiesz na poniższe podejście?
Trik nazywa się
method borrowing.
Pożyczamy
join
metodę ze zwykłej tablicy[].join.
i używamy[].join.call
do jej uruchomienia w kontekściearguments
.Dlaczego to działa?
Jest tak, ponieważ wewnętrzny algorytm metody natywnej
arr.join(glue)
jest bardzo prosty.Wzięty ze specyfikacji prawie „tak jak jest”:
Więc technicznie wymaga tego i łączy to [0], to [1]… itd. Razem. Jest celowo napisany w sposób, który pozwala na dowolną tablicę (nie jest to przypadek, wiele metod stosuje się do tej praktyki). Dlatego też działa z
this=arguments.
źródło