日期:2014-05-16  浏览次数:20443 次

求解这个函数
求解下面这函数,
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)));
}
}

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

求解下面这函数,
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)));
}
}


引用:
你看下call和apply的用法就只到了啊
他两都是调用你指定的方法的 只是参入的参数的格式不一样  


哥们看清楚点问题,和那两个的使用没关系,我也有了解。

你真了解了吗
你先确认清楚了 call的作用
在来看 slice方法的参数的作用


我不知道你说的了解是怎么说,但是
call第一个参数是冒充this对象,其他参数都直接传递给函数自身。
Array.prototype.slice.call(arguments)
这个是如何能等同Array.prototype.slice.call(arguments,0)这个?
数组的方法应该是这样slice(start,[end]),这个我没说错吧,那在call调用之后这个开始从0截取是如何得到?


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