2012-07-20 10 views
7

He estado buscando en algunos de los populares console.log() envolturas/polyfills:¿Por qué los polyfills de console.log() no usan Function.apply()?

noto que todos ellos aceptar múltiples arguments, pero todos hacen algo como esto:

console.log(arguments); 

que se traduce en una salida como ésta (en Chrome):

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

Considerando que, por lo menos en un navegador moderno como Chrome o Firefox, console.log() acepta también varios argumentos, por lo que esto produciría (en mi humilde opinión) de impresión superior:

console.log.apply(console, arguments) 

que se traduce en una salida como ésta (en Chrome):

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

¿Hay alguna razón en particular por la que deba evitar el uso de console.log.apply() con múltiples argumentos? ¿O esto solo es cuestión de gusto o ahorrar bytes?

+0

@PaulIrish Alguna idea sobre console.log vs console.log.apply? –

+3

Probablemente esta no sea la razón principal, pero la propiedad console.log en IE no tiene el prototipo de Función. Es decir, no tiene la función 'aplicar'. – Sam

+1

Bien, esa es probablemente una muy buena razón. –

Respuesta

1

Yo personalmente le sugiero que solo use .apply() cuando tiene que: .apply() es la única forma de pasar una matriz como los argumentos de una función. Si no lo hace, necesita para pasar una matriz, simplemente use console.log(). Es menos detallado y es una invocación directa.

+0

Bueno, eso es lo que * I * creo, pero las personas que conocen JS mejor que yo no estamos haciendo esto, y entonces me gustaría saber por qué. –

0

Tenga en cuenta que apply toma una matriz de argumentos!

Así llamando console.log(args) tienen que ser console.log.apply(console, [args]), no console.log.apply(console, args) a comportarse igual - en su ejemplo cada elemento de matriz se convierte en su propio argumento a aplicar.

Por otro lado también puede llamar console.log("foo", "bar", $("body"))

Cuestiones relacionadas