首页 > 编程语言 > 详细

关于类数组对象的类数组操作

时间:2017-02-14 00:52:40      阅读:314      评论:0      收藏:0      [点我收藏+]

怎么理解类数组对象

javascript有个很特别的东西,类数组。什么是类数组呢,应该都听说过js函数中的arguments,除了这个还有很多很多。

比如说:string就是个类数组,你可以取string[3]获得第四个字符,也可以string.length

    DOM元素的childNodes,用querySelectorAll选中的全部元素,还有jQeury也是很经典的类数组对象。

 

为什么他们是呢,因为他们都是对象,没有继承Array,但是他们有0,1,2,3下标,也有length;

神奇。。。

在这我们造一个类数组玩玩。

var arr = [ 1 , 2 , 3 ]    //制造一个数组
var arrCopy = {}        //一个假的数组
for( var i = 0 ; i < arr.length ; i++ ){
    arrCopy[i] = arr[i]    //假数组获得了真数组的所有元素了
}
arrCopy.length = arr.length ;  //假数组还有长度
arrCopy.say = function(){
    console.log(" i am not arr ")  //假数组居然还有了say方法
}

 console.log("下边这是真的arr")
 console.log(arr)
 console.log("下边这是arrCopy")
 console.log(arrCopy)


技术分享

上面我们构造了一个对象,这个对象居然有“下标”,本质上这个不是下标,字符串属性而已。他还有length,也是人造的而已啦。

 

那么这个类数组有什么意义呢

它获得了数组以下标为属性值的性质和length长度属性,更便捷的获取元素和操作,但是他不能使用array的任何方法。因为没有继承到。但是他有其他的方法,这是array所没有的。

类数组操作

好多人会觉得,好可惜呀,我的类数组对象不能map, forEach, every是一件多么难受的事情啊。

其实操作方法很简单利用call就可以了

[].map.call(arrCopy,function(elem,index){
  return elem*elem
})

 同理其他的方法也一样

this指向问题,forEach map这些会把指向改变,他们有第二个参数this指向的是第二个参数;

类数组对象和数组的转化

var newArr = [].slice.call(arrCopy);

这样就可以返回一个新的数组和arrCopy一样,简单省事。

 

关于类数组对象的类数组操作

原文:http://www.cnblogs.com/sowhite/p/6395940.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!