javascript - 类数组调用数组的map方法实现方式

查看:99
本文介绍了javascript - 类数组调用数组的map方法实现方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

发现一个问题,如题,代码如下:

var l = document.getElementsByClassName("list")[0].children;//我获取了页面上一个ul下的li集合
        var b = Array.prototype.slice.call(l);//复制l类数组,并添加数组方法到新数组上(这是第一种方式,可以成功调用map方法)
        var arry = [...l];);//直接转换为数组(这是第二中方式,也能成功调用)

        var r = Array.prototype.map.call(l);//问题在这里了,不复制类数组,而直接添加数组方法,失败,并报错:Uncaught TypeError: undefined is not a function at HTMLCollection.map (<anonymous>)
//        var r = [].map.call(l);//这也是第三种方式的变形,同样失败
        function add(that){
            var s = that.innerHTML;
            that.innerHTML=s+1;
        }
        arry.map(add);//成功
        b.map(add);//成功
        r.map(add);//失败

我的疑惑是为什么第三种方式失败了,可是我在:
博客文章
这篇文章上发现,貌似他同样也是用这种实现的啊:
他的方式一:
NodeList.prototype = Array.prototype;
他的方式二:
Array.prototype.map.call(links,function(e){})

,如果确实是我的代码又问题,望大神帮忙指出并优化

解决方案

这个问题是因为,map()方法的第一个参数是一个回调函数,第二个参数是绑定的this对象,而call()方法第一个参数是要绑定的this对象,后面的参数是要传给map方法的参数,你这里没有给他传回调函数,所以默认是undefined,而undefined不是一个函数

这篇关于javascript - 类数组调用数组的map方法实现方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆