2012-07-20 13 views
7

Sono stato a guardare alcuni dei popolari console.log() wrapper/polyfills:Perché i polyfill di console.log() non utilizzano Function.apply()?

noto che tutti loro accettare più arguments, ma fare qualcosa del genere:

console.log(arguments); 

che si traduce in output come questo (in Chrome):

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

considerando che, almeno in un browser moderno come Chrome o Firefox, console.log() accetta anche più argomenti, in modo che questo produrrebbe (IMHO) uscita superiore:

console.log.apply(console, arguments) 

che si traduce in output come questo (in Chrome):

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

C'è qualche ragione particolare per cui dovrei evitare di usare con più argomenti? O questo è solo questione di gusti o di salvataggio dei byte?

+0

@PaulIrish Ogni pensiero su console.log vs console.log.apply? –

+3

Questo probabilmente non è il motivo principale, ma la proprietà console.log in IE non ha il prototipo Function. I.e, non ha la funzione 'apply'. – Sam

+1

Beh, ehi, probabilmente è una buona ragione. –

risposta

1

Suggerirei personalmente di utilizzare solo .apply() quando è necessario: .apply() è l'unico modo per passare un array come argomento di una funzione. Se non lo hai hai bisogno di per passare un array, quindi usa solo console.log(). È meno prolisso ed è un'invocazione diretta.

+0

Beh, questo è quello che * io * penso, ma le persone che conoscono JS meglio di me non lo fanno, e quindi mi piacerebbe sapere perché. –

0

Si prega di notare che apply prende uno array di argomenti!

Quindi chiamare console.log(args) deve essere console.log.apply(console, [args]), non console.log.apply(console, args) comportarsi in modo uguale - nell'esempio ogni elemento in array diventa il suo argomento proprio in applicazione.

D'altra parte si può anche chiamare console.log("foo", "bar", $("body"))

Problemi correlati