JavaScript Array Prototype,'this'没有'push'方法

时间:2016-08-18 07:59:04

标签: javascript arrays prototype

我试过这个:

// You can pass an array on the addArr method, and each element from the 
// passed array is pushed to the array on which addArr was called.
Array.prototype.addArr = function( arr ){
   console.log( this );

   // As `this` is the array, we use this.push to insert arr's elements
   arr.forEach(function(elm){
     this.push( elm );
   });

   // And then finally return this.
   return this;
};

代码已经使用评论解释,但让我直截了当。我正在尝试在名为Array的{​​{1}}对象上创建一个新方法,该方法可以将数组addArr传递给该方法,并将每个元素添加到该方法所在的数组中被称为。

例如

[1, 2, 3]

我收到var myArr = [1, 2, 3]; myArr.addArr( [4, 5, 6] ); // The output is supposed to be [1, 2, 3, 4, 5, 6] ,我已经尝试过调试,这总是会返回父数组,但它仍然表示Uncaught TypeError: this.push is not a function不是函数。

我该如何解决?我可以使用像Lodash这样的库,但我不喜欢这么小的应用程序。

谢谢!

1 个答案:

答案 0 :(得分:4)

this存储到函数外部的变量中。

 Array.prototype.addArr = function( arr ){
 var that = this;
 arr.forEach(function(elm){
 that.push( elm );
 });

  return this;
 };
var myArr = [1,2,3];
myArr.addArr([4,5]);

替代方案,正如@nnnnnn指出的那样,您可以将this作为参数传递给.forEach函数。

 Array.prototype.addArr = function( arr ){
 arr.forEach(function(elm){
 this.push( elm );
 },this);
 return this;
 };

var myArr = [1,2,3];
myArr.addArr([4,5]);