2012-10-01 6 views
5

Gibt es irgendwelche Browser Einschränkungen oder andere Probleme, die mich zu tun, verhindert:Ist es notwendig, vor dem Aufruf von apply Argumente in Array zu konvertieren?

fn.apply(this, arguments); 

gegen:

fn.apply(this, Array.prototype.slice.call(arguments)); 

Ich weiß, dass apply nimmt einen „echten“ Array als zweites Argument, aber vorbei ein Argumentsammlung scheint genauso gut zu funktionieren. oder...?

Antwort

4

Nach der MDN, es "Ruft eine Funktion mit einem gegebenen diesen Wert und Argumente als ein Array (oder ein Array wie Objekt)". Da arguments ein array-ähnliches Objekt ist, sollte es keine Einschränkung bei der Verwendung geben.

In der Tat, die description explizit sagt arguments ist ein gültiger Parameter.

+1

Ich dachte auch, aber ich sehe 'Array.prototype.slice.call (Argumente)' in so vielen "professionellen" Codebeispielen, ich dachte, dass es einen gültigen Grund geben muss ... – David

+0

Es ist notwendig, wenn Sie wollen Array-Operationen wie Append, Shift oder Push auszuführen, so dass die meisten Entwickler, die ich kenne, es mehr aus Gewohnheit machen als alles andere. – saml

0

Die Unterstützung ist unknown auf MDN.

Nur Firefox ist bekannt, Array-ähnliche Objekte für das zweite Argument von Function.prototype.apply() zu akzeptieren. Ich würde Vorsicht walten lassen, bevor ich arguments direkt passiere.

Verwandte Themen