使用额外参数调用forEach中的函数

时间:2016-05-30 12:19:19

标签: javascript

我试图在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个参数,用于索引和值,而不是其他任何东西。

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代替.forEachreturn 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" );
}