Ich habe also ein Prototyp-Objekt, das einen Ereignis-Listener registriert. Der Listener empfängt ein Objekt und eine Zeichenfolge, die die Quelle des ausgegebenen Ereignisses angibt. Das Objekt wird das Argument einiger Funktionsaufrufe sein (_convertToX(someObj)
, _convertToY(someObj)
, ...).
Nun, was ich versuche zu tun ist dynamisch rufen Sie meine convert
Funktionen (wie es möglicherweise einige mehr in der Zukunft hinzugefügt werden), jeder von ihnen dauert genau ein Argument (someObj
).Funktionen dynamisch aufrufen, abhängig vom Namen
// constructor
const MyFactory = function() {
// ...
$rootScope.$on('someObj:changed', (event, someObj, source) => {
// TODO: call converters dynamically, but not the one which converts back to the source
// source can be 'X', 'Y' or 'Z'
});
}
MyFactory.prototype._convertToX = function (someObj) {
// TODO: convert to X and emit
};
MyFactory.prototype._convertToY = function (someObj) {
// TODO: convert to Y and emit
};
MyFactory.prototype._convertToZ = function (someObj) {
// TODO: convert to Z and emit
};
Es könnte schon Antworten auf SO auf ähnliche Fragen, aber ich wusste nicht, wie man die richtigen Suchbegriffe zu finden ...
Mein Ansatz ein Array zu erstellen wäre mit allen converter
Funktion und rufen Sie sie aus dem Array. Das Problem, das ich sehe, ist, wie kann ich sicherstellen, dass ich den Konverter nicht anrufe, der zurück zu source
konvertiert?
/**
* Hold references to all converters.
* @type {Array<function>}
*/
this._converters = [
this._convertToX,
this._convertToY,
this._convertToZ
];
// assume source is 'Z'
$rootScope.$on('someObj:changed', (event, someObj, source) => {
// how to call each function in this._converters with someObj as argument
// except this._convertToZ(someObj) ?
});
Ist das ein sauberer Ansatz? Wie macht man das?
Oder gibt es eine sauberere/einfachere Möglichkeit, dies zu implementieren?
Thx für die Antwort. Aber ich muss alle Konverter ** außer ** der Quellkonverter aufrufen, also würde ich noch ein Array benötigen, um alle Konvertierungsfunktionsreferenzen richtig zu halten? – lenny
@Lenny, Siehe aktualisierte Antwort, ich werde es vorziehen, die Referenz von Quellen zu speichern – Satpal