我试图在javascript中替换匿名函数调用,以获取forEach中的实际函数。
我所拥有的是:
whatever: function( importantParam ) {
array.forEach( function ( val ) {
if ( val === importantParam ) console.log( "OK" );
} );
}
我想要达到的目标是:
whatever: function( importantParam ) {
array.forEach(this.whatever2,this);
},
whatever2: function( p1, importantParam) {
if ( p1 === importantParam ) console.log( "OK" );
}
所以问题是当我在forEach中调用whatever2时,我真的不知道如何传递importantParam,因为它将一个函数作为参数,带有2个参数,用于索引和值,而不是其他任何东西。
答案 0 :(得分:1)
你需要以某种方式包裹whatever2
,例如使用.bind
var array = [1, 2, 3],
obj;
obj = {
whatever: function (importantParam) {
array.forEach(this.whatever2.bind(this, importantParam));
},
whatever2: function (importantParam, p1) {
if (p1 === importantParam)
console.log("OK");
}
};
obj.whatever(2); // logs OK
在ES6中,您可以清理它并使用箭头功能
let obj = {
whatever(importantParam) {
array.forEach(x => this.whatever2(x, importantParam));
},
whatever2(p1, importantParam) {
if (p1 === importantParam)
console.log("OK");
}
};
请注意,您提供的此示例用例看起来应该实际使用.some
代替.forEach
和return true
执行日志
答案 1 :(得分:0)
用另一个功能
包裹它whatever: function( importantParam ) {
array.forEach(function(item) {
this.whatever2(item, importantParam);
},this);
},
或切换参数的顺序并使用bind
部分应用回调
whatever: function( importantParam ) {
array.forEach(this.whatever2.bind(this, importantParam));
},
whatever2: function(importantParam, p1) {
if ( p1 === importantParam ) console.log( "OK" );
}