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"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步