Ich habe rund um SO ein wenig gesucht und kann keine Lösungen finden, die zu tun scheinen, was ich versuche zu tun. Ich habe zwei Objekte mit den gleichen Eigenschaften.Richtig zusammenführen zwei Funktionen in JavaScript
this.defaultEvents = {
[FOCUS]: (e) => {
this.focusHandler(e);
},
[BLUR]: (e) => e
};
this.otherEvents = {
[FOCUS]: (e) => {
this.otherFocusHandler(e);
}
}
Ich möchte in der Lage sein, diese Eigenschaften zu verschmelzen, so dass ich irgendwie etwas wie diese zu erhalten ...
this.mergedEvents = {
[FOCUS]: (e) => {
this.focusHandler(e);
this.otherFocusHandler(e);
},
[BLUR]: (e) => e
};
Damit ich (e) => this.mergedEvents[FOCUS](e)
aufrufen kann und haben beide Fokus-Handler mit der heißen dieselben Argumente.
Diese Frage scheint am nächsten zu sein, was ich versuche zu tun. Ich denke, ein Anruf zu jeder Funktion sollte funktionieren?
Extend a function - merge two functions?
Diese temporäre Lösung scheint zu funktionieren, aber ich denke, ich sollte Anruf oder anwenden verwenden? Ich kenne sie nicht sehr gut.
const merged = {};
for(let key in defaultEvents) {
if (otherEvents.hasOwnProperty(key) && typeof otherEvents[key] === 'function') {
merged[key] = function(e) {
defaultEvents[key](e);
otherEvents[key](e);
}
}
}
merged[FOCUS]('test');
hier ist ein code pen zu
Kurz, mit etwas seltsame Sachen zu tun 'eval', es gibt nicht wirklich eine Möglichkeit, einer bestehenden Funktion etwas hinzuzufügen. Ich denke, Ihre beste Wette ist, nur eine Funktion zu haben, die zwei andere Funktionen aufruft ... – RobertAKARobin
Konnten Sie kein Objekt mit einer Ereignishandlerregistrierungsmethode ähnlich addEventListener herstellen, die einen Rückruf annimmt? –
Wenn Sie "n" Funktionen "zusammenführen" möchten, müssen Sie eine neue Funktion erstellen, die die 'n' Funktionen aufruft. –