求解下面这函数,
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)));
}
}
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)));
}
}
解决方案 »
- 请问一下日期控件的位置如何控制?
- 图片验证码的换一张的功能怎么实现??????
- 使用borderWidth的时候会一动一动的????
- JS 事件处理提问!
- 急救:请 天外水火 到我刚发的帖子看看,鼠标还是透不过去啊,先谢了
- 请教一个js控制style的问题
- 如何在网页中添加浏览器的安全站点,如何设置浏览器,使其清空缓存(就象自己点击工具,属性,删除文件一样)
- 我用javascript想要一个除去一文本框里文本两边空格的函数,各位大哥能告诉我吗?
- 请高手出场 关于调用控件的问题 谢谢了
- 不用提交的方式,能把客户端的数据传到服务器端吗?
- 在页面弹出一个div,里面添加了一个Object播放视频,隐藏div如何删除object
- JS 地区效果
他两都是调用你指定的方法的 只是参入的参数的格式不一样
args = Array.prototype.slice.call(arguments, 2); 你知道这得到的是什么吗?args.concat(Array.prototype.slice.call(arguments)) 这个又是什么?
var $a = a;
var $b = b;
var $c = c;
}
var $x = Bind(window,aa,'11','22');
$x('?1');
你真了解了吗
你先确认清楚了 call的作用
在来看 slice方法的参数的作用
你说这两个的结果得到是什么?
你真了解了吗
你先确认清楚了 call的作用
在来看 slice方法的参数的作用我不知道你说的了解是怎么说,但是
call第一个参数是冒充this对象,其他参数都直接传递给函数自身。
Array.prototype.slice.call(arguments)
这个是如何能等同Array.prototype.slice.call(arguments,0)这个?
数组的方法应该是这样slice(start,[end]),这个我没说错吧,那在call调用之后这个开始从0截取是如何得到?
这是javascript.
你就不会自己试一下的吗?
var $a = ['a','b'];
var $b = $a.slice();
你真了解了吗
你先确认清楚了 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了 剩余的试下不就知道了
http://www.w3school.com.cn/js/jsref_slice_array.asp
参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
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 。。)
你可以看下基础点的 比如javascript权威指南之类的书 虽然很厚 但有点基础看个大体明白也用不了几天时间不喜勿喷
按array.slice(begin[, end]) 这样写法,的确是必须的。
不过看那个地方有个收获就是。
Method of Array instances
Method of XX instances.
刚好于prototype匹配。
看来还是看英文好一点。