2012-07-20 17 views
7

Ich habe bei einigen der beliebtesten console.log() Wrapper/polyfills suchen:Warum verwenden console.log() - Polyfills nicht Function.apply()?

Ich stelle fest, dass alle von ihnen mehrere akzeptieren arguments, aber sie alle tun etwas in der Art:

console.log(arguments); 

, die in Ausgabe so ergibt sich (in Chrome):

<code>console.log(['foo', 'bar', $('body')])</code>

Während zumindest in einem modernen Browser wie Chrome oder Firefox, console.log() mehrere Argumente akzeptiert auch, so dass diese (IMHO) erzeugen würde, hervorragende Qualität:

console.log.apply(console, arguments) 

die in Ausgabe so ergibt sich (in Chrome):

<code>console.log.apply(console, ['foo', 'bar', $('body')])</code>

Gibt es einen bestimmten Grund, warum ich vermeiden sollte, console.log.apply() mit mehreren Argumenten zu verwenden? Oder ist das nur eine Frage des Geschmacks oder der Speicherung von Bytes?

+0

@PaulIrish Irgendwelche Gedanken auf console.log vs console.log.apply nennen? –

+3

Dies ist wahrscheinlich nicht der Hauptgrund, aber die console.log -Eigenschaft in IE hat nicht den Funktionsprototyp. Das heißt, es hat nicht die "Anwenden" -Funktion. – Sam

+1

Na hey, das ist wahrscheinlich ein sehr guter Grund. –

Antwort

1

Ich würde persönlich vorschlagen, dass Sie nur .apply() verwenden, wenn Sie müssen: .apply() ist die einzige Möglichkeit, ein Array als Argumente einer Funktion übergeben. Wenn Sie kein benötigen, um ein Array zu übergeben, verwenden Sie einfach console.log(). Es ist weniger ausführlich und es ist eine direkte Invokation.

+0

Nun, das ist, was ich denke, aber Leute, die JS besser kennen als ich, tun das nicht, und deshalb würde ich gerne wissen warum. –

0

Bitte beachten Sie, dass apply ein Array Argumente übernimmt!

Also Aufruf console.log(args) muss console.log.apply(console, [args]), nicht console.log.apply(console, args) sein, um gleich zu sein - in Ihrem Beispiel wird jedes Element in Array sein eigenes Argument in anwenden.

Auf der anderen Seite können Sie auch console.log("foo", "bar", $("body"))

Verwandte Themen