2011-10-31 11 views
5

Sto leggendo il libro Javascript: The Good Parts. E sono confuso dal seguente codice.Perché apply() qui richiede un solo argomento anziché due?

Function.method('curry', function () { 
    var slice = Array.prototype.slice, 
     args = slice.apply(arguments), 
     that = this; 
    return function () { 
     return that.apply(null, args.concat(slice.apply(arguments))); 
    }; 
}); 

Dov'è il null in slice.apply(arguments)?

risposta

5

arguments viene passato come contesto (this), non gli argomenti della funzione.

È equivalente a arguments.slice(), ad eccezione del fatto che arguments.slice() non esiste.

2

È l'equivalente di chiamare slice() su un array senza argomenti, ovvero restituisce un array con tutti gli elementi dell'array originale. In questo caso, 'arguments' non è un array vero, quindi chiamare Array.prototype.slice su di esso in effetti lo trasforma in uno.

1

Sono state richiamate due diverse funzioni. Nel primo caso

var slice = Array.prototype.slice, 
args = slice.apply(arguments), 

per spiegazione grande riferiscono a

http://blog.sebarmeli.com/2010/11/12/understanding-array-prototype-slice-applyarguments/

diffusa metodo Array.prototype.slice, sia invocata, che converte gli argomenti passati alla funzione in una matrice.

Nella seconda funzione viene chiamato il metodo della funzione. L'uso e i dettagli di questa funzione sono ben definiti qui http://www.devguru.com/technologies/ecmascript/quickref/apply.html

Problemi correlati