在这一块儿一直不懂
现在我都这样用。
call让slice函数把str当做this来处理,对数组来说数组按index获取this的每一个元素来产生一个新的数组的过程同样适用于字符串,结果就是迭代字符串的每一个字符生成字符数组。
es6版的玩法:[...str]
call()第一个参数代表this指向,但数组来说数组按index获取this的每一个元素来产生一个新的数组在[].slice().call()中怎么理解
@dislido 有些地方还是不懂,能再详细点吗?
@Arthur-lt [].slice() 就是以数组为this调用slice,加个call(str)就变成了以str为this,也就是str.slice(),而slice的工作过程刚好也适用于字符串类型
const a = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
[].slice.call(a); // ['a','b','c']
实际上,slice只是用到了this的数组相关属性index和length
@dislido 比如function a(a,b,c){…} f.call(‘window’,1,2,3)相当于window.f(1,2,3) 所以这里的[].slice.call(str) 是不是相当于str.[].slice()?
我有点懂你的意思,你的意思是原本是[].slice 但call导致str.slice() 而str.slice()的工作过程有恰巧跟[].slice一致
@Arthur-lt 可以理解为str通过call把原本属于[]的slice抢了过来自己用,这个过程和str自己的slice是无关的
@dislido 好的,懂了点。谢谢^~^
@dislido 66