<script type="text/javascript">
var foo = {
	fooCallbacks: [],
	addCallback: function(callback) {
		this.fooCallbacks.push(callback);
	},
	doCallback: function() {
		with (this) {
			var i, c = fooCallbacks.length;
			for (i = 0; i < c; i++) {
				if (typeof fooCallbacks[i] == "function") {
					fooCallbacks[i]();
				}
			}
		}
	}
};

var bar = {
	barValue: 42,
	callback: function() {
		with (this) {
			alert("Success: bar.callback was called!\n"+
				"And the bar value is " + barValue);
			barValue++;
		}
	},
	callback2: function() {
		with (this) {
			alert("Success: bar.callback2 was called!\n"+
				"And the bar value is " + barValue);
		}
	}
};

foo.addCallback(bar.callback.apply(bar));
foo.addCallback(bar.callback2.apply(bar));
foo.doCallback();
</script>