Rolf B: Aufrufende Variable im Objekt ermitteln

Beitrag lesen

Hallo Matthias,

ja, scheint so. Mich hat das "instanziiert" durcheinandergebracht. Instanziiert wurde von irgendeineFunktion. Das richtige Wort wäre vermutlich "referenziert".

Aber dann gilt Dedlfixens Aussage: Objekte können an vielen Strippen baumeln, keine davon ist irgendwie besonders.

Wenn es die Notwendigkeit gibt, in einem Eventhandler auf eine bestimmte Variable zuzugreifen, die dieses Objekt enthält, wäre das weniger trivial. Es gibt eigentlich nur genau einen Grund, warum man das tun wollte: um sie zu verändern. D.h. um das Objekt gegen ein anderes auszutauschen. Das würde ich als Antipattern bezeichnen, denn man weiß ja nicht wer das Objekt noch alles hält, und ein Überschreiben von irgendeineVariable würde nicht allen Haltern einer Referenz auf dieses Objekt bekannt. Das mag für den konkreten Fall okay sein, es ist im Allgemeinen aber ein Kandidat für Objektspagetti.

Variante 1: Man hinterlegt nach dem new eine Extramethode, die den Replace durchführen kann:

let irgendeineVariable = new IrgendeinObjekt();

irgendeineVariable.replaceYourselfWith = newObj => irgendeineVariable = newObj;

// ---------
// Im Eventhandler, e.foo enthält das Objekt

function EventHandler(e) {
   e.foo.replaceYourselfWith({ x,y,z });
}

Ich sehe aber instinktiv rot, wenn ich sowas sehe.

Variante 2: Namensgesteuert

window.irgendein = [];   // Global (oder global in einem Modul)

irgendein.objekt = new irgendeinObjekt();
irgendein.objekt.key = "objekt";

// ---------
// Im Eventhandler, e.foo enthält das Objekt

function EventHandler(e) {
   irgendein[e.foo.key] = { x,y,z };
}

Find ich konzeptionell genauso schrecklich. Ich mag nicht in der Zwangslage stecken, in der man da nicht dran vorbei kommt.

Relevanter Trick ist jedenfalls, am Objekt einen irgendwie gearteten Verweis auf den Speicherort zu hinterlegen, der im Eventhandler benötigt wird.

Rolf

--
sumpsi - posui - obstruxi