2016-05-30 15 views
0

Ich versuche, einen anonymen Funktionsaufruf in Javascript für eine echte Funktion in einem ForEach zu ersetzen.Funktion in ForEach mit zusätzlichen Parametern aufrufen

Was ich habe, ist so etwas wie:

whatever: function(importantParam) { 
    array.forEach(function (val) { 
     if (val === importantParam) console.log("OK"); 
    }); 
} 

Was will ich erreichen ist so etwas wie:

whatever: function(importantParam) { 
    array.forEach(this.whatever2,this); 
}, 
whatever2: function(p1, importantParam) { 
     if (p1 === importantParam) console.log("OK"); 
} 

Also das Problem ist, dass ich nicht wirklich wissen, wie die importantParam passieren wenn ich whatever2 forEach anrufe, da es eine Funktion als Argument mit 2 Argumenten für den Index und den Wert und nichts anderes benötigt.

Antwort

1

Sie müssen whatever2 irgendwie wickeln, z.B. .bind mit

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 

In ES6 können Sie diese aufzuräumen und Pfeil Funktionen

let obj = { 
    whatever(importantParam) { 
     array.forEach(x => this.whatever2(x, importantParam)); 
    }, 
    whatever2(p1, importantParam) { 
     if (p1 === importantParam) 
      console.log("OK"); 
    } 
}; 

Bitte beachten Sie verwenden, die dieses Fallbeispiel Verwendung Sie sieht zur Verfügung gestellt haben, wie Sie tatsächlich .some stattdessen verwenden sollten .forEach und return true wo Sie das Protokoll

+0

Vielen Dank! Arbeitete perfekt. Ich gebe nur ein Beispiel dafür, wie ich diesen zusätzlichen Parameter weitergeben musste, ich vergleiche die Werte nicht wirklich, brauche sie für das ganze Array, aber danke für diesen zusätzlichen Tipp :) – Mayday

0

Wickeln Sie es mit einer anderen Funktion

whatever: function(importantParam) { 
    array.forEach(function(item) { 
    this.whatever2(item, importantParam); 
    },this); 
}, 

oder die Reihenfolge der Argumente wechseln und bind verwenden teilweise Rückruf anwenden

whatever: function(importantParam) { 
    array.forEach(this.whatever2.bind(this, importantParam)); 
}, 
whatever2: function(importantParam, p1) { 
     if (p1 === importantParam) console.log("OK"); 
} 
Verwandte Themen