我试过这个:
// 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这样的库,但我不喜欢这么小的应用程序。
谢谢!
答案 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]);