Demnach könnte ich eine Funktion statt der Eigenschaft inCurrentValue vorsehen, die dann inCurrentValue setzt und zusätzlich noch andere Aufgaben übernimmt.
Richtig.
Wie weiss nur diese Funktion möglichst einfach, an welche Objekte die Werte zum Weitergeben sind?
Wie gesagt, am besten durch »Loose Coupling«: indem du dir ein Event-Modell baust und vorher für das Ereignis Handler registrierst. Die Setter-Funktion triggert dann einen Event, sodass die Liste der Handler durchlaufen und jeder aufgerufen wird.
Siehe beispielsweise das Event-Modul in Backbone (Quellcode). Das kann man natürlich auch einfacher lösen: Einer Registrierfunktion, einer Handler-Liste und einer Trigger-Funktion, die die Handler aufruft.
Falls das jemand noch liest:
Danke für die Links, habe ich mir ein wenig angeschaut. Anhand dessen dann überlegt, dass ich kein weiteres Framework einbauen möchte, damit ja alles mit allem kompatibel bleibt (tut's eh nicht...*gg*)
auf jeden Fall habe ich es so gelöst:
function oADSVar(_inChannel, _inCurrentValue)
{
// Kanalnummer, beginnend bei 1
this.inChannel = _inChannel;
this.inCurrentValue = _inCurrentValue;
this.aObservers = new Array();
this.setCurrVal = function(_inCurrVal)
{
var j = 0;
if (this.inChannel != "")
{
( ( _inCurrVal & Math.pow(2, (this.inChannel)-1) ) > 0) ? this.inCurrentValue = 1 : this.inCurrentValue = 0;
}
for ( this.j = 0; this.j < this.aObservers.length; this.j++)
{
var oObj = eval(this.aObservers[this.j]);
oObj.setCurrVal(_inCurrVal);
}
}
this.attach = function (_sName)
{
this.aObservers.push(_sName);
this.bObserved = true;
return this.inCurrentValue;
}
}
var var1 = new oADSVar("1" "");
var var2 = new oADSVar("2", var1.attach("var2"));
var2 registriert sich also bei var1 und var1 sorgt beim Update der eigenen Werte wiederum um die Verteilung. Vielleicht nicht die schönste Lösung, aber definitiv einfach.
Der Aufruf var1.attach("var2") gefällt mir noch nicht ganz, wäre cool, wenn man den Namen des Observer-Objekts automatisch übergeben könnte. Werde dazu noch etwas überlegen.