2011-10-31 7 views
5

Estoy leyendo el libro Javascript: The Good Parts. Y estoy confundido por el siguiente código.¿Por qué apply() aquí solo toma un argumento en lugar de dos?

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

¿Dónde está el null en slice.apply(arguments)?

Respuesta

5

arguments se está pasando como el contexto (this), no los argumentos de la función.

Es equivalente a arguments.slice(), excepto que arguments.slice() no existe.

2

Eso es lo mismo que llamar a slice() en una matriz sin argumentos, es decir, devuelve una matriz con todos los elementos de la matriz original. En este caso, 'argumentos' no es una matriz verdadera, por lo que llamar a Array.prototype.slice lo convierte en uno.

1

Se están invocando dos funciones diferentes. En el primer caso

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

para gran explicación se refieren a

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

aplican se invoca el método de Array.prototype.slice,, que convertirá los argumentos pasados ​​a la función en una matriz.

En la segunda función, se está llamando al método de función. El uso y los detalles de esta función están bien definidos aquí http://www.devguru.com/technologies/ecmascript/quickref/apply.html

Cuestiones relacionadas