Array.prototype.slice.call()

1.今天看到Zepto.js的插件   $.extend通过源对象扩展目标对象的属性

$.extend = function (target) {
var deep, args = slice.call(arguments, 1)
if (typeof target == 'boolean') {
deep = target
target = args.shift()
}
args.forEach(function (arg) {
extend(target, arg, deep)
})
return target
}

看到 slice.call(arguments, 1)一下子蒙了,是怎么样的一个执行顺序,带我好好缕缕

1.call(content,val1,val2),第一个参数是改变this的指向,之后的都是传进去的相应的参数
slice.call(arguments, 1) ===>  arguments.slice(1);

slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法。要是直接写arguments.slice(1)会报错。
因为arguments不是一个数组就没有slice属性

typeof arguments==="Object" //而不是 "Array"


原文地址:https://www.cnblogs.com/sunnie-cc/p/6797786.html