Gibt es ein gutes Muster für JavaScript, das überschriebene Funktionen in einem übergeordneten Objekt aufruft, ohne das spezifische übergeordnete Element zu kennen?

8

Grundsätzlich möchte ich vererbbare Funktionen wie in

%Vor%

Und ich möchte, dass es gedruckt wird

%Vor%

Ja, ich weiß, dass ich Base.prototype.foo.call (this) explizit aufrufen kann; Ich frage mich nur, ob es ein Muster gibt, um überschriebene Super-Klassen-Funktionen automatisch aufzurufen. Das Problem, das ich versuche zu lösen, ist 2-fach.

  1. abgeleitete Klassen sollten NICHT daran denken müssen, die Methode ihrer Eltern aufzurufen, dies geschieht einfach automatisch.
  2. Wenn 1. nicht passieren kann, dann möchte ich Abgeleitet, Base nicht namentlich zu nennen, da das spröde ist. Eher möchte ich es Elternklasse oder etwas anrufen, so dass Sie die Basis nicht kennen müssen. Auf diese Weise müssen Sie nicht jede abgeleitete Klasse reparieren, wenn Sie den Namen der Basis ändern.
gman 25.08.2011, 11:17
quelle

6 Antworten

2

Sie können diese Funktionalität implementieren, indem Sie eine Struktur wie folgt verwenden:

%Vor%     
Rob W 13.02.2012 14:17
quelle
2

Ich würde vorschlagen, genau darüber nachzudenken, warum Sie dies tun, zumindest in Bezug auf die Anforderung Nr. 1. Denken Sie daran, dass Ihr gewünschtes Muster viel Flexibilität wegnehmen würde. Zum Beispiel, wenn Sie eine Situation haben, in der Sie die Anweisungen in umgekehrter Reihenfolge drucken möchten:

%Vor%

Sie müssten entweder Ihr Muster aufgeben oder eine Funktion foo2 () in der abgeleiteten Klasse erstellen, die dann in der Basisklasse foo () aufruft. Weder ist sehr hübsch.

Gleiches gilt, wenn Sie sogar etwas so Einfaches tun möchten wie:

%Vor%

Ich würde behaupten, dass die Verwendung dieses Musters für genau das, was Sie gerade tun möchten, funktionieren kann, aber es kann Ihnen Anfälle geben, wenn Sie eine scheinbar triviale Veränderung auf der Straße machen wollen. Alles um eine Codezeile zu speichern!

    
LAW 08.03.2012 06:59
quelle
0

Soweit ich weiß, gibt es keine Sprache integrierte Destruktor-Funktionalität in JavaScript. Es geht um Frameworks. Wenn Sie beispielsweise ASP.NET Ajax verwenden, erwartet das Framework, dass Ihre Objekte über eine Dispose-Methode verfügen, die für das Freigeben von Ressourcen zuständig ist (Event-Handler). Also liegt es an dir.

    
Genady Sergeev 25.08.2011 11:23
quelle
0

Ok, das ist nicht ganz , wonach du suchst, da es kein "Muster" ist, aber es ist ein möglicher Implementierungspfad, dem du folgen könntest:

Schauen Sie sich das MooTools Class.Extras -Paket an (mangels eines besseren Wortes). Mit der Chain-Klasse könnten Sie wahrscheinlich die gewünschte Funktionalität erhalten.

    
Bob FiveThousand 13.02.2012 14:12
quelle
0
%Vor%     
Brian Cray 21.02.2012 16:39
quelle
0

Ich würde einen Weg vorziehen, wo ich Abgeleitete = kettenweise () nicht zuweisen würde, so dass die API die gleiche wäre, wie Sie in Ihrer Frage hatten, aber im Moment ist dies der beste Weg, um es zum Laufen zu bringen. Es funktioniert, indem jede Methode des Objekts durch eine Methode ersetzt wird, die die ersetzte Methode aufruft und die Elternkette aufruft, wobei sie ihre Methoden auf dem Weg aufruft.

%Vor%     
numerek 24.02.2012 04:04
quelle

Tags und Links