// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
这是例子;
我看js教程说 DOM方法中说到slice() 这个括号里面必须要放一个参数 可对比上面的例子我没看到参数呢, 跪求指教一二
http://cnodejs.org/topic/5149a8f9069911196df5c592
因为arrayLike不一定是一个Array对象,它是一个类数组对象,
类数组对象
1.拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
2.不具有数组所具有的方法
所有这里显示的创建一个空数组调用其slice方法并把它放入arrayLike的执行上下文(call的显示绑定this到arrayLike),这样这个类数组对象中数字索引(在对象中数字的键会被转为字符串,比如'1','2')就可以被slice处理
举个栗子
arrayLike = {
}
arrayLike = {
1 : 'a',//实际上1会被转为'1',下面以此类推
2 : 'b',
3 : 'c',
'color' : 'red',
length : 3
}
var arr = [].slice.call(arrayLike); // ['undefined', 'a', 'b'],slice()不带参数是可以执行的相当于复制了这个类数组对象的0~length-1的键值对并返回一个数组,如果是一个数组那么就是返回从0到最后一个索引的数组的拷贝(一个新的数组)
上面格式有问题重新发一次
因为arrayLike不一定是一个Array对象,它是一个类数组对象,
类数组对象
1.拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
2.不具有数组所具有的方法
所有这里显示的创建一个空数组调用其slice方法并把它放入arrayLike的执行上下文(call的显示绑定this到arrayLike),这样这个类数组对象中数字索引(在对象中数字的键会被转为字符串,比如'1','2')就可以被slice处理
举个栗子
arrayLike = {
1 : 'a',//实际上1会被转为'1',下面以此类推
2 : 'b',
3 : 'c',
'color' : 'red',
length : 3
}
var arr = [].slice.call(arrayLike); // ['undefined', 'a', 'b'],slice()不带参数是可以执行的相当于复制了这个类数组对象的0~length-1的键值对并返回一个数组,如果是一个数组那么就是返回从0到最后一个索引的数组的拷贝(一个新的数组)