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"