function ObservedVariable(value)
{
var _observers = [];
this.GetValue = function GetValue()
{
return value;
}
this.SetValue = function SetValue(newValue)
{
if (value == newValue)
return;
value = newValue;
for (var i = _observers.length - 1; i >= 0; i--)
{
if (_observers[i](this) === false)
_observers.splice(i, 1);
}
}
this.AddObserver = function AddObserver(observer)
{
_observers.push(observer);
}
}
function Test()
{
var ov = new ObservedVariable(1);
WatchValue(ov);
alert('Setting new value');
ov.SetValue(42);
}
function WatchValue(ov)
{
var someValue = 'hello';
alert('About to start watching');
ov.AddObserver(function(changedVariable)
{
alert('New value: ' + changedVariable.GetValue() + ' someValue: ' + someValue);
});
}
Test();