2016-04-16 4 views
1

Ich möchte einen bestimmten Methodennamen für alle Objekte in einer gegebenen Liste aufrufen können. Sagen wir, die Methode, die ich aufrufen möchte, ist ein Sprung, und ich habe eine Liste von Leuten, die verschiedene Sprungmethoden haben. Einige springen in verschiedenen Winkeln, andere höher oder niedriger usw. Aber ich möchte die Sprungmethode auf meiner ganzen Liste von Basketballspielern aufrufen, um zu sehen, wer im Team sein wird.Wie erstellt man eine Funktion, die eine Objektmethode für jedes Objekt in einer Liste aufruft?

function doMethodToList(list, method){ 
    for(var i = 0; i< list.length; i++){ 
     list[i].method(); 
    } 
} 
var roster = [new Jack(), new Jill(), new Brody()]; 
doMethodToList(roster, "jump"); 

Ich denke, etwas wie der obige Code sollte funktionieren. Allerdings würde es einen Fehler beim Aufruf doMethodToList(roster, "jump") auslösen, weil ich versuche, eine Zeichenfolge als Methode zu verwenden. Irgendwelche Ideen wie diese Funktion funktioniert? Vielleicht denke ich daran alles falsch? Antworten sehr geschätzt.

Antwort

4

Sie können in Ihrer Schleife einfach wie folgt vor:

if (list[i][method]) list[i][method](); 
+0

Das ‚wenn‘ ist eine wirklich gute Idee. Dadurch kann ich keine Liste mit Listen mehr durchgehen, die Objekte mit einem bestimmten Methodentyp enthalten. Jetzt laufe ich einfach durch alle Objekte und schaue ob sie die Methode haben. Wenn ja, läuft es. Wenn nicht, ist es kein Fehler. –

+2

Sie können auch eine Typprüfung hinzufügen, um sicherzustellen, dass es sich um eine Funktion handelt: 'if (Liste [i] [Methode] && Typof Liste [i] [Methode] ===" Funktion ") Liste [i] [Methode]() ; Für den Fall, dass einige Ihrer Objekte Eigenschaften haben, die keine Methoden sind, aber denselben Namen haben –

4

Um eine Eigenschaft eines Objekts mit einem String-Zugriff Sie verwenden eckige Klammer-Notation

function doMethodToList(list, method){ 
    for(var i = 0; i< list.length; i++){ 
     list[i][method]();// <-- here 
    } 
} 
var roster = [new Jack(), new Jill(), new Brody()]; 
doMethodToList(roster, "jump"); 
Verwandte Themen