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

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

  2.   

    start 不是必须的。
    args = Array.prototype.slice.call(arguments, 2); 你知道这得到的是什么吗?args.concat(Array.prototype.slice.call(arguments)) 这个又是什么?
      

  3.   

    function aa(a,b,c){
    var $a = a;
    var $b = b;
    var $c = c;
    }
    var $x = Bind(window,aa,'11','22');
    $x('?1');
      

  4.   

    哥们看清楚点问题,和那两个的使用没关系,我也有了解。
    你真了解了吗
    你先确认清楚了 call的作用
    在来看 slice方法的参数的作用
      

  5.   

    start不是必须,这你确定?我看w3c里面这个是也说必填。。
    你说这两个的结果得到是什么?
      

  6.   

    哥们看清楚点问题,和那两个的使用没关系,我也有了解。
    你真了解了吗
    你先确认清楚了 call的作用
    在来看 slice方法的参数的作用我不知道你说的了解是怎么说,但是
    call第一个参数是冒充this对象,其他参数都直接传递给函数自身。
    Array.prototype.slice.call(arguments)
    这个是如何能等同Array.prototype.slice.call(arguments,0)这个?
    数组的方法应该是这样slice(start,[end]),这个我没说错吧,那在call调用之后这个开始从0截取是如何得到?
      

  7.   

    看java看傻了。
    这是javascript.
    你就不会自己试一下的吗?
    var $a = ['a','b'];
    var $b = $a.slice();
      

  8.   

    哥们看清楚点问题,和那两个的使用没关系,我也有了解。
    你真了解了吗
    你先确认清楚了 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了 剩余的试下不就知道了
      

  9.   

    其实3个浏览器我都试过了,slice()不带参数也可以有结果,但是我看规范也查过资料,开始那个参数都是必须的,我知道这个是为什么是不是3个浏览器都没有按规范实现?还是其它原因。比如下面这个:
    http://www.w3school.com.cn/js/jsref_slice_array.asp
    参数 描述
    start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
      

  10.   

    其实这个函数的功能试试都能知道它用干什么,但我不理解这个函数为什么要这样写为什么能这样写?比如我另外一个问题是
    2.fun.apply(object, args.concat(Array.prototype.slice.call(arguments))),这里args为什么还concat啊?那不就是多余吗args明显就是第三个参数起的其它参数,那为什么还要再连接一次全部传进来的参数。
      

  11.   


    这个代码看着好像是为了给对象绑定一个事件。
    所以当你写一个绑定函数的时候 肯定是 一般这么写Bind(object,f, 参数1,参数2,参数3,等)那这里个人认为它没什么特殊的目的,只是函数f交换下接受参数,同时也想把自己object本身也传入。所以f最后接受的参数是(参数1,参数2,参数3,。object,fun, 参数1 。。)
      

  12.   

    .....这里就你自己在激动啦  
    你可以看下基础点的  比如javascript权威指南之类的书 虽然很厚  但有点基础看个大体明白也用不了几天时间不喜勿喷
      

  13.   

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2Fsliceslice方法中start参数可以省略,详看前面网址
      

  14.   

    其实,那个地方也没说。
    按array.slice(begin[, end]) 这样写法,的确是必须的。
    不过看那个地方有个收获就是。
    Method of Array instances
    Method of XX instances.
    刚好于prototype匹配。
    看来还是看英文好一点。
      

  15.   

    javascript是弱类型语言,参数可以不传的