var pObj = document.getElementsByTagName('p');
console.log( [].slice.call(pObj) ); // 返回数组形式[p,p,p]
console.log( pObj.slice() ); // Error
我的疑问:
1.两个slice方法中的this是不是都是指向的pObj?
2.正因为typeof pObj是object类型,所以不具备slice方法,正如第二个中的error。但是它又像数组所以可以采用第一种方法,理解的对吗?
3.如果上述两个我理解都对的话,其实slice方法中的this处理的是类数组,现在理解的对吗?
4.请大神一一指正。
1.
pObj是一个 HTML 集合,也是一个类数组对象。Array.prototype.slice.call()[].slice.call()slice()可以用来将类数组对象或者集合(比如上面的pObj)转换为数组。只需要把slice()方法绑定到要转换的类数组对象或者集合上即可。[].slice.call(pObj)这就是一个转换数组的过程。2.
pObj.slice()报错。看下面这个图,这个类数组对象(集合)没有
slice()方法,当然报错。3.上述问题可忽略你对
this的想法。建议重新理解一次this关键字的应用。