如果我有一组对象,如:
function Fruit() {
this.onTree = true;
}
Fruit.prototype.pick = function() {
this.onTree = false;
};
var arr = [new Fruit(), new Fruit()];
有没有办法使用Array.forEach在每个方法上调用pick
方法而不创建额外的匿名函数?
arr.forEach(function(f) { f.pick(); });
我想也许我可以使用Fruit.prototype.pick.call
执行某些操作,但this
函数的call
上下文已丢失,所以我必须bind
这样,我最终会:
arr.forEach(Function.call.bind(Fruit.prototype.pick));
哪个有效,但它非常丑陋。基本上我只想从Java那里得到这样的东西:
arr.forEach(Fruit::pick);
答案 0 :(得分:5)
您可以使用多种方法,但至少需要将函数传递给forEach
,因为这是它的语法。但是如果您使用ES6
,则可以使用arrow functions
,它可以更漂亮。
arr.forEach(f => f.pick());
答案 1 :(得分:1)
你在水果定义之后错过了()
,不是吗?
function Fruit() {
this.onTree = true;
}
Fruit.prototype.pick = function() {
this.onTree = false;
};
var arr = [new Fruit(), new Fruit()];
arr.forEach(function(val, index) {
val.pick();
console.log(val);
})
我测试了那个,它改变了那些fruit.onTree变成了假。
答案 2 :(得分:0)
如果你不能使用ES6(但是,好吧,2017年......)你可以存储你的this
参考
var self = this;
function invoker(item){
Item.pick.call(self);
}
array.forEach(invoker)
或者只使用for
循环