function $A (iterable) {
    return Array.prototype.slice.apply(iterable);
}

// Erweitere alle Funktionsobjekte um eine Methode »bind«
// über die prototype-Eigenschaft des Function-Konstruktors.
Function.prototype.bindAsTimer = function () {

    // Speichere die gegenwärtige Funktion in »method«.
    var method = this;

    // Die Funktion nimmt eine beliebige Anzahl von Parametern entgegen,
    // auf die über den »arguments«-Pseudoarray zugegriffen wird.
    // Wandle »arguments« mit einer Helferfunktion in einen echten Array um.
    var args = Array.prototype.slice.apply(arguments);

    // Entnehme dem Array den ersten Parameter. Das ist das Objekt, in
    // dessen Kontext die Funktion ausgeführt werden soll.
    // »args« enthält nun die restlichen Parameter.
    var object = args.shift();

    // Notiere einen Funktionsausdruck, der als Closure wirkt.
    var wrapper = function () {

        // Die Closure schließt »method«, »object« und »args« ein.
        // Rufe die Funktion im Kontext des Objektes »object« auf,
        // reiche dabei die restlichen Parameter durch und
        // gib den Rückgabewert der Funktion zurück.
        return method.apply(object, args);

    };

    // Gib die Wrapper-Funktion zurück.
    return wrapper;

};

// Erweitere alle Funktionsobjekte um eine Methode »bindAsEventListener«
// über die prototype-Eigenschaft des Function-Konstruktors.
Function.prototype.bindAsEventListener = function (object, activator) {

    // Die Funktion nimmt einen Parameter entgegen, der das
    // Objekt darstellt, in dessen Kontext die gewünschte Funktion
    // ausgeführt werden soll.

    // Speichere die gegenwärtige Funktion in »method«.
    var method = this;
    // Speichere activator (z.B. Das angeklickte HTML-Element) in der gegenwärtigen Funktion
    this.activator = activator;

    // Notiere einen Funktionsausdruck, der als Closure wirkt.
    var wrapper = function (event) {
        // Die Closure schließt »method« und »object« ein.

        // Vereinheitliche den Zugriff auf das Event-Objekt.
        // Dieses wird der Handler-Funktion entweder als Parameter
        // übergeben (hier »event«) oder steht im Internet Explorer
        // unter »window.event« zur Verfügung.
        var eventObject = event || window.event;

        // Rufe die Methode im Kontext des Objektes »object« auf und
        // reiche das Event-Objekt durch.
        return method.call(object, eventObject);

    };

    // Gib die Wrapper-Funktion zurück.
    return wrapper;
};

// Erweitere alle Funktionsobjekte um eine Methode »bindTo«
// über die prototype-Eigenschaft des Function-Konstruktors.
Function.prototype.bindTo = function () {
    var method = this,
        applyArgs,
        args = Array.prototype.slice.apply(arguments),
        object = args.shift();
    var wrapper = function () {
        if (arguments) {
            var moreArgs = Array.prototype.slice.apply(arguments);
            applyArgs = moreArgs.concat(args);
        } else {
            applyArgs = args;
        }
        return method.apply(object, applyArgs);
    };
    return wrapper;
};


