Należy użyć apply
:
var fn = function() {
console.log(arguments);
};
var args = [1,2,3];
fn.apply(null, args);
Zastosuj uczyni równoważne wywołanie funkcji:
fn(1,2,3);
Zauważ, że użyłem null
jako pierwszy argument apply
, która będzie wyznaczać słowa kluczowego this
do obiekt globalny (window
) wewnątrz fn
.
Również należy wiedzieć, że obiekt arguments
naprawdę nie jest tablicą, to obiekt array-like, który zawiera indeksy numeryczne odpowiadające argumentów, które były wykorzystywane do nazywają swoją funkcję, właściwość length
który daje liczbę użyte argumenty i właściwość arguments.callee
, która jest odwołaniem do funkcji wykonującej (przydatne do rekursji na anonimowych funkcjach).
Jeśli chcesz, aby tablicę z obiektu arguments
, można użyć metody Array.prototype.slice
:
var fn = function() {
var args = Array.prototype.slice.call(arguments);
console.log(args);
};
Edit: W odpowiedzi na Twój komentarz, tak, można użyć metody shift
i ustawić jej zwracana wartość jako kontekst (słowa kluczowego this
) na swojej funkcji:
fn.apply(args.shift(), args);
ale należy pamiętać, że shift
usunie pierwszy element z oryginalnej tablicy, a twoja funkcja zostanie wywołana bez tego pierwszego argumentu.
Jeśli nadal trzeba zadzwonić czynność ze wszystkimi innymi argumentami można:
fn.apply(args[0], args);
A jeśli nie chcesz zmienić kontekst, można łatwo wyodrębnić pierwszego argumentu wewnątrz funkcji:
var fn = function() {
var args = Array.prototype.slice.call(arguments),
firstArg = args.shift();
console.log(args, firstArg);
};
Co jeśli chcę zakres być pierwszy element tablicy? czy muszę go sfałszować za pomocą shift()? – David
@David: Co masz na myśli pod pojęciem zakresu? Słowo kluczowe "this"? – CMS
Tak, używając apply(), pierwszy argument staje się zasięgiem (tym) dla funkcji, prawda? Zakres w tym przypadku musi być pierwszym elementem tablicy. – David