2016-05-30 106 views
0

我想用javascript中的匿名函数调用来替代forEach中的实际函数。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"); 
} 

所以问题是,我真的不知道怎么打发importantParam当我在forEach中调用whatever2时,因为它需要一个函数作为参数,它有2个参数用于它们的索引和值,而不是别的。

回答

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代替.forEachreturn true你在哪里做日志

+0

非常感谢!完美工作。我只是举了一个例子,我需要传递额外的参数,我没有真正比较这些值,需要整个数组,但是多谢了额外的提示:) – Mayday

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"); 
}