猿问

类数组调用数组的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){})


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


噜噜哒
浏览 410回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答