MaierMan: Neuer Artikel: Organisation von JavaScripten

Beitrag lesen

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)