发现一个问题,如题,代码如下:
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){})
,如果确实是我的代码又问题,望大神帮忙指出并优化
相关分类