Javascript reduce 函数不适用于此对象

Javascript reduce function doesn't work on this obj

我是 Javascript 的新手,正在尝试在父对象上执行以下代码,但它没有按预期工作。请帮忙。

以下代码未按预期运行并抛出错误:

"TypeError: this.reduce is not a function"

Array.prototype.merge = merge = this.reduce(function(arg1,arg2)   {
    return arg1+arg2;
},[]);

var arrays =  [1,2,3,4,5,6];
console.log(arrays.merge);

它抛出如下错误:

TypeError: this.reduce is not a function
    at Object.<anonymous> (C:\Program Files\nodejs\merge.js:1:100)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:475:10)
    at startup (node.js:117:18)
    at node.js:951:3

如果我直接调用数组,它工作正常,但这不是我想要做的。我应该能够按照上面的示例代码所示传递数组。

Array.prototype.merge = merge = [1,2,3,4,5,6].reduce(function(arg1,arg2)   {
    return arg1+arg2;
},[]);

console.log(arrays.merge);

我会像这样向 Array.prototype 添加一个合并函数:

Array.prototype.merge = function () {
    return this.reduce(function (arg1, arg2) {
        return +arg1 + +arg2;
    }, []);
};


var arrays = [1, 2, 3, 4, 5, 6];
console.log(arrays.merge());

有关 Javascript here 中的 this 关键字的更多信息。

这应该可以解决问题![​​=12=]

Array.prototype.merge = function () {
    return this.reduce(function (arg1, arg2) {return arg1 + arg2;},[]);
};

顺便说一句,这是可行的,因为在这种情况下,this 是调用该方法的对象,它是您的合并函数。

使用Object.defineProperty - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

Object.defineProperty(Array.prototype, 'merge', {
  get: function() { return this.join(''); },
  enumerable: false,
  configurable: true
});

或 - 使用 reduce

Object.defineProperty(Array.prototype, 'merge', {
  get: function() { 
    return this.reduce(function (arg1, arg2) {
      return arg1 + arg2;
     }, []); 
  },
  enumerable: false,
  configurable: true
});

此代码将允许您执行您在几条评论中所说的操作

console.log([1,2,3,4,5].merge);

而不是

console.log([1,2,3,4,5].merge());