js:为什么要使用Array.prototype.map.call而不是map()?

时间:2016-11-11 09:46:21

标签: javascript arrays

这是casperjs JS的一个例子:

function getPrices() {
  var price = document.querySelectorAll('#InvoiceDetailGrid tbody');
  return Array.prototype.map.call(price, function(elem) {
    return elem.textContent;
  });
}

为什么要使用Array.prototype.map.call:不能简单地使用: price.map()

3 个答案:

答案 0 :(得分:5)

因为price是一个类数组(NodeList)对象,而不是数组。

使用Array.prototype.map,您将采用Array方法并使用类似数组的对象作为映射对象。

答案 1 :(得分:1)

  

为什么要使用Array.prototype.map.call:不能简单地使用:   price.map()?

因为你想调用你在调用中传递的函数作为具有指定this的第二个参数。您的案例中的this是第一个参数:priceprice是一个类似于对象的数组(它有一个长度属性),但它没有数组的方法有。因此,你可以在像对象这样的数组上调用map函数的唯一方法就是这样。

如果价格是一个数组,你可以像往常一样调用地图:

price.map(function(item){//...});

它不是一个数组的事实会引导您进入这个解决方案。

答案 2 :(得分:0)

因为document.querySelectorAll会返回一个没有.map方法的类数组对象。它不会返回实际的数组