类数组对象转换为数组对象的简单理解

关于类数组对象

JavaScript中有一些著名的类数组对象,它们看起来很像数组:

  1. 拥有length属性

  2. 元素按序保存在对象中,可以通过索引访问

但实际和数组又不是一回事:

  1. 没有数组的很多方法

  2. 也会有数组没有的方法
    (e.g. NodeList的item()方法)

  3. 有些类数组对象是动态变化的
    (e.g. NodeList的值是基于DOM结构动态执行查询的结果)

  4. ……

将类数组对象转换为数组对象

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, 对象, 类数组, 方法

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部