类数组对象转换为数组对象的简单理解
关于类数组对象
JavaScript中有一些著名的类数组对象,它们看起来很像数组:
拥有length属性
元素按序保存在对象中,可以通过索引访问
但实际和数组又不是一回事:
没有数组的很多方法
也会有数组没有的方法
(e.g. NodeList的item()方法)有些类数组对象是动态变化的
(e.g. NodeList的值是基于DOM结构动态执行查询的结果)……
将类数组对象转换为数组对象
Array.prototype.slice.call(arraylike, 0);
这是一个遍地开花的方法,这里主要是想简单理解一下实现原理。
Array的通用方法
Array对象的很多方法都是通用方法,意思是其它非数组对象也可以直接借来使用,因为它们在设计时没有要求使用方法的对象必须是数组。
Array.prototype.slice()就是这样一个方法,只要对象有length属性并可以通过索引访问,就可以使用该方法。
当仅传入一个参数,且传入参数为空或0时,从索引为0的元素开始复制,直到最后一个元素,结果被保存在一个数组中返回。
Function.call()方法
这个方法使得你可以在一个对象上借用另一个对象的方法。
第一个参数即为实际调用方法的对象,其后的参数为依次传入方法的参数。
将NodeList对象转换为数组对象的限制
不知道现在还是否需要考虑这一点?
IE8之前的版本将NodeList实现为COM对象而非DOM对象,COM对象不能直接调用js方法,因此需要采取其他方式转化。
/* JavaScript高级程序设计-第十章 P250 */function convertToArray(nodes) { var array = null; try { array = Array.prototype.slice.call(nodes, 0); } catch(ex) { array = new Array(); for(var i=0; i<nodes.length; i++) { array.push(nodes[i]); } } return array;}
关键字:JavaScript, 对象, 类数组, 方法
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!