function ArrayOf(){
return [].slice.call(arguments);
}
这个函数式是实现将arguments转换成数组。
但是我有个疑问就是这个call()方法不是第一个参数不是指向this对象吗?为啥这个表达式[].slice.call(arguments)中,我感觉arguments怎么变成了参数了传入到空数组中了?
实在不知道这个实现原理?有没有大佬能让我醍醐灌顶
function ArrayOf(){
return [].slice.call(arguments);
}
这个函数式是实现将arguments转换成数组。
但是我有个疑问就是这个call()方法不是第一个参数不是指向this对象吗?为啥这个表达式[].slice.call(arguments)中,我感觉arguments怎么变成了参数了传入到空数组中了?
实在不知道这个实现原理?有没有大佬能让我醍醐灌顶
[].slice
是在获取 slice
方法
function ArrayOf() {
const slice = [].slice
return slice.call(arguments)
}
这么看你就明白了。
给类数组 arguments 调用Array 的方法 slice, 使其变为真正的数组
可以称为方法借用, [].slice 是一个方法, 借给 arguments 用用, 得到 arugments 的数组副本
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
functionName.call
的参数是(绑定对象,方法参数)
,相当于绑定对象.functionName(方法参数)
。 对应本例,arguments
这个数组做了绑定对象,相当于执行了arguments.slice()
。[].slice
只是表示借用了数组的slice方法。PS.深挖一下,其实slice这个方法实现中应该有个
this
,使用call(绑定对象)
的方式调用它,绑定对象
会充当这个this(这是call或apply真正干的事情),看例子,一看就懂