这是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()
?
答案 0 :(得分:5)
因为price
是一个类数组(NodeList)对象,而不是数组。
使用Array.prototype.map
,您将采用Array方法并使用类似数组的对象作为映射对象。
答案 1 :(得分:1)
为什么要使用Array.prototype.map.call:不能简单地使用: price.map()?
因为你想调用你在调用中传递的函数作为具有指定this
的第二个参数。您的案例中的this
是第一个参数:price
,price
是一个类似于对象的数组(它有一个长度属性),但它没有数组的方法有。因此,你可以在像对象这样的数组上调用map
函数的唯一方法就是这样。
如果价格是一个数组,你可以像往常一样调用地图:
price.map(function(item){//...});
它不是一个数组的事实会引导您进入这个解决方案。
答案 2 :(得分:0)
因为document.querySelectorAll
会返回一个没有.map
方法的类数组对象。它不会返回实际的数组。