求解这个函数
求解下面这函数,
1.Array.prototype.slice.call(arguments),我看javascript的文档数组的slice()方法是这样的slice(start,[end]),那就是参数start是必须的,为何这里这个方法不需要,也可以执行,等同Array.prototype.slice.call(arguments,0)?
2.fun.apply(object, args.concat(Array.prototype.slice.call(arguments))),这里args为什么还concat啊?那不就是多余吗?
var Bind = function(object, fun) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
}
}
------解决方案--------------------
var a = [1,2,3];
alert(Array.prototype.slice.call(a,0));
alert(Array.prototype.slice.call(a));
alert(a.slice(0));
alert(a.slice());
你理解call了 剩余的试下不就知道了
------解决方案--------------------其实这个函数的功能试试都能知道它用干什么,但我不理解这个函数为什么要这样写为什么能这样写?
比如我另外一个问题是
2.fun.apply(object, args.concat(Array.prototype.slice.call(arguments))),这里args为什么还concat啊?那不就是多余吗
args明显就是第三个参数起的其它参数,那为什么还要再连接一次全部传进来的参数。
这个代码看着好像是为了给对象绑定一个事件。
所以当你写一个绑定函数的时候 肯定是 一般这么写
Bind(object,f, 参数1,参数2,参数3,等)
那这里个人认为它没什么特殊的目的,只是函数f交换下接受参数,同时也想把自己object本身也传入。
所以f最后接受的参数是(参数1,参数2,参数3,。。。。object,fun, 参数1 。。)
------解决方案--------------------https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2Fslice
slice方法中start参数可以省略,详看前面网址
------解决方案--------------------其实,那个地方也没说。
按array.slice(begin[, end]) 这样写法,的确是必须的。
不过看那个地方有个收获就是。
Method of Array i