Netter Artikel an sich. Allerdings fehlen |prototype|s komplett. Ferner scheint mir dieses Event-Workaround-This-Gemauschel ziemlich "konfus". Richtiger Ansatz mit den closures, aber warum sollte man die Referenz auf |this| in den "global" packen (außer ggf. für Wiederverwendbarkeit)?
|Object| und auch |Function| haben nebenbei noch einiges an "Utilities" zu bieten...
<script type="text/javascript">
function myObj(name) {
this.myName = name;
}
myObj.prototype = {
delayAlertSimple: function mO_delayAlertSimple(message, to) {
var self = this;
setTimeout(function(){alert(self.myName + "\n\n" + message);}, to);
},
_doAlert: function mO__doAlert(message) {
alert(this.myName + "\n\n" + message);
},
delayAlertCall: function mO_delayAlertCall(message, to) {
var self = this;
setTimeout(function(){self._doAlert(message);}, to);
},
_genericDelayedCall: function mO__genericDelayedCall(func, to) {
var self = this;
var args = [];
for (var i = 2; i < arguments.length; ++i) { args.push(arguments[i]); }
setTimeout(function(){
func.apply(self, args);
}, to);
},
delayAlertGeneric: function mO_delayAlertGeneric(message, to) {
this._genericDelayedCall(this._doAlert, to, message);
}
}
function myDerived(name, status)
{
this._name = name;
this._status = status;
this.myName = this._name + " " + this._status;;
}
myDerived.prototype = myObj.prototype;
var obj = new myObj("hallowelt");
obj.delayAlertSimple("Die Welt sagt hallo!", 1000);
obj.delayAlertCall("Und ich grüße zurück!", 2000);
obj.delayAlertGeneric("Was eine tolle Welt!", 3000);
var obj2 = new myDerived("schöne", "Welt");
obj2.delayAlertSimple("Die Welt sagt hallo!", 4000);
</script>
<body onload="obj.delayAlertGeneric('loadediload', 10);">
<div id="test" onclick="obj.delayAlertGeneric('Clickediclick', 10);">click()</div>
</body>
(Unpraktische, aber theoretisch nicht zu verachtende Beispiele)