2011-01-09 15 views
6

estudio el siguiente código al inicio sesiónAplicar pregunta() de JavaScript

console.log.apply(console, arguments); 

¿Cuál es el propósito de apply() aquí?

¿Por qué no solo console.log("message", arguments)?

Gracias.

Respuesta

7

La función apply() llama a otra función con un valor dado this y arguments como una matriz.

La razón para una implícita func.apply(obj, args) es asegurarse de que dentro de func(), this se refiere a obj.

8
console.log("message", arguments) 

llama log con dos argumentos, "mensaje" y los argumentos objeto de matriz similar.

console.log.apply(console, arguments); 

lo llama con n argumentos, donde n es la longitud de los argumentos objeto de matriz similar. En otras palabras, los argumentos se desenvuelven en argumentos individuales. El contexto del método es console. Ej .:

function foo(a, b, c) 
{ 
    console.log.apply(console, arguments); 
} 
foo(1,2,3); 

es más o menos equivalente a:

console.log(1,2,3); 
+2

favor explicar la baja votación. –

+1

Para la compatibilidad con IE9 'console.log.apply (console, arguments);' se puede cambiar a 'Function.prototype.apply.call (console.log, console, arguments);' – Victor

1

Creo que tanto la respuesta no explicó por qué. El uso real brillante de esta forma de programar.

No me gustó la primera respuesta, no pude entender ni siquiera leer tres veces y la segunda me siento incompleta.

Creo que el objetivo principal de escribir de esta manera es usarlo dentro de una función (o cierres).

Por lo tanto, esta línea solo tiene sentido dentro de su registrador personalizado: console.log.apply (console, arguments);

Probablemente fue un enfoque mejor que escribir algo como esto:

function my_worse_way_to_log_dynamic_args ([several dynamic arguments]) 
{ 
    // loop each argument 
    // call console.log for each one 
} 

function my_better_way_to_log_dynamic_args ([several dynamic arguments]) 
{ 
    console.log.apply(console, arguments); 
} 
Cuestiones relacionadas