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());
我是 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());