扩展Array.prototype返回undefined

时间:2014-02-12 16:20:37

标签: javascript arrays prototype

我正在尝试扩展Array.prototype以包含一个square函数。我有这个:

Array.prototype.square = function(){
  return this.forEach(function(el){
    return (el * el)
  });
}

当我在数组上调用此函数时,请说arr = [2, 2, 2]它返回undefined。如果我在那里添加一个console.log,我可以看到forEach函数的回调函数正确执行 - 它记录4次三次。为什么这个函数返回undefined而不是[4,4,4]的新数组?

2 个答案:

答案 0 :(得分:6)

forEach方法不返回值。您需要使用map

Array.prototype.square = function(){
  return this.map(function(el){
    return (el * el)
  });
}

console.log([2, 2, 2].square()); // [4, 4, 4]

答案 1 :(得分:2)

如p.s.w.g.说,.map是适当的功能,但在评论中,您询问使用forEach。要使其工作,您必须创建一个临时数组:

Array.prototype.square = function(){
  var tmp = [];

  this.forEach(function(el){
    tmp.push(el * el)
  });

  return tmp;
}

console.log([2, 2, 2].square()); // [4, 4, 4]
不过,

.map()更好。