Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)

1. Array: 全局的构造函数

1. prototype: 函数都会有该属性

  实例: https://codepen.io/ZuoBo/pen/djpBBM?editors=0010

  相关解释: https://blog.csdn.net/zeping891103/article/details/79215201

2. slice: 是String和Array的方法

  [String/Array].slice(start, end);

3. arguments: 类数组对象

 类数组对象: 就是有一个length的属性,同时值是数字, 同时其他的属性是数字:{length: 2, 0: 'first', 1: 'second'}

 类数组并不是真正的数组,所以它不能直接调用数组的方法: 比如Array.slice

4. call: Function.call(obj, item1[, item2][, item3]...)

  obj将会代替Function函数里面的this, 同时item1, item2..作为参数传给Function

5. Array.prototype.slice: slice是Array构造函数prototype上的方法

6. Array.prototype.slice.call(arguments): 是让arguments这个类数组对象调用Array构造函数原型链上的slice方法

  那么Array.prototype.slice究竟做了什么事情呢?

  

  function slice(start, end) {

    var len = ToUint32(this.length), result = [];

    for(var i = start; i < end; i++) {

      result.push(this[i]);

    }

    return result;

  }

 

  所以Array.prototype.slice.call(arguments, 0): 可以类比为Array.slice(0)

 

相关阅读: https://blog.csdn.net/hellokingqwe/article/details/52585169

 

posted @ 2018-07-19 20:36  让我想起这个世界  阅读(169)  评论(0)    收藏  举报