TypeError: this.reduce is not a function (类型错误:this.reduce 不是一个函数)

18 浏览
0 Comments

TypeError: this.reduce is not a function (类型错误:this.reduce 不是一个函数)

This question already has answers here:

在JavaScript中遍历数组的循环(for each)

在将一个方法添加到Array原型之后,一些不相关的脚本会出现错误。

  • [Opera] 未处理错误: \'this.reduce\' 不是一个函数
  • [Firefox] TypeError: this.reduce 不是一个函数

这个方法本身是有效的([1,2,3].xintsum() 输出了预期的 6)。

// adding a function to the Array prototype
Array.prototype.xintsum = function() { return this.reduce(function(old, add) {return old + add;}, 0); };
// accessing the array in a way that worked before
$(document).ready(function (){
  var some_array = [];
  for (head_n in some_array) {
    var v = some_array[head_n];
    $('

').text(v); } });

admin 更改状态以发布 2023年5月22日
0
0 Comments

这段代码:

var v = some_array[head_n];
$('').text(v);

当它到达 xintsum 时,与这个是相同的:

$('').text(function() { 
    return this.reduce(function(old, add) {
        return old + add;
    }, 0); 
});

当一个函数被传递给 text 时,该函数将被调用,为所调用的jQuery对象中包含的每个元素调用一次。对于每次调用,this 引用该dom元素。在这种情况下,是你创建的 th。因此,错误消息告诉你,th 没有这样的函数。

0
0 Comments

这是因为你在数组上使用了 for..in 循环,你不应该这样做。

当你添加了 Array.prototype.xintsum,你为每个数组添加了一个 xintsum 属性。所以,你的 for 循环遍历了数组的这个属性。

这个属性的值是一个函数。当你将一个函数传递给 .text(),jQuery会像这样调用它:

v.call(ele, index text);

它将 this 设置为该元素。DOM元素没有 .reduce 函数。

你需要像这样循环:

for(var i = 0; i < some_array.length; i++){
    var v = some_array[i];
}

0