2011-01-09 13 views

risposta

7

La funzione apply() chiama un'altra funzione con un dato valore this e arguments fornito come un array.

La ragione di un implicito func.apply(obj, args) è assicurarsi che all'interno func(), this riferisce a obj.

8
console.log("message", arguments) 

chiama log con due argomenti, "messaggio" e gli argomenti oggetto di matrice simile.

console.log.apply(console, arguments); 

chiama con n argomenti, dove n è la lunghezza degli argomenti oggetto array simile. In altre parole, gli argomenti vengono scartati in singoli argomenti. Il contesto del metodo è console. Es .:

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

è più o meno equivalente a:

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

Si prega di spiegare il down-voto. –

+1

Per compatibilità con IE9 'console.log.apply (console, argomenti);' può essere cambiato in 'Function.prototype.apply.call (console.log, console, argomenti);' – Victor

1

Penso che sia la risposta non ha spiegato perché. Il vero uso brillante di questo modo di programmare.

Non mi piaceva la prima risposta votata, non riuscivo a capirlo nemmeno leggendo tre volte e la seconda mi sembra incompleta.

Penso che lo scopo principale di scrivere in questo modo sia di utilizzarlo all'interno di una funzione (o di una chiusura).

Quindi, questa riga ha senso solo nel logger personalizzato: console.log.apply (console, argomenti);

Probabilmente è stato un approccio migliore che scrivere qualcosa del genere:

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); 
} 
Problemi correlati