in this article, john resig discusses snippet currying:
function.prototype.curry = function() { var fn = this, args = array.prototype.slice.call(arguments); return function() { return fn.apply(this, args.concat( array.prototype.slice.call(arguments))); }; };
i confused expression array.prototype.slice.call(arguments)
.
here "arguments" "this" argument array's slice() method, "slice()" requires argument itself, think you'd need
array.prototype.slice.call(arguments, <someindex>)
. don't understand how code can working is.according the docs on "arguments", "arguments" not array, array object. how calling "slice()" on it? , if put in code
console.log(arguments.slice())
error saying object not have slice method.
what's going on here?
answer first question:
if call slice on array without arguments, return copy of array. array.prototype.slice.call(arguments)
same, operates on arguments
object, returning array.
answer second question:
we can call slice on arguments
because it's "generic" method (see note here). when pass arguments
object this
, slice
treat array. since arguments
array-like object contains length
property, works.
Comments
Post a Comment