javascript - Function.apply in connect's source code -
this question has answer here:
reading connect's source code, came across following lines. want know why it's using function.apply
.
app.listen = function(){ var server = http.createserver(this); return server.listen.apply(server, arguments); };
as understand, function.apply used in cases want call function different this
value. since server.listen
's this
server
in above example, isn't sufficient write following?
app.listen = function(){ var server = http.createserver(this); return server.listen(arguments); };
.apply(thisarg, argsarray)
takes 2 arguments can see described here. first argument (which sounds know) this
value function call. second argument array-like object contains arguments passed function. second argument why being used here can call function same arguments passed first function app.listen()
.
this common usage "forwarding" arguments 1 function without having know arguments are. since arguments
object array-like data structure, fits second argument of .apply()
expects array-like object list of arguments.
server.listen(arguments);
not work because call .listen()
, passing single argument function array-like list of arguments. not function signature of server.listen()
. needs each argument passed separately, not passed in list. .apply()
serves purpose of fixing that. takes array-like list of arguments , passes them individual arguments called function.
server.listen(...)
further complicated fact has 4 different possible sets of arguments can passed it. use of .apply()
allows forwarding code entirely independent of arguments passed forwards passed without having know it.
Comments
Post a Comment