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

浙公网安备 33010602011771号