mozilla .bind()

A silly example of one of the ways to use bind

by peterbenoit

HTML

<div>

JavaScript

var fruit = {
    getColor: function (f) {
        colors.getColor(f, this.gotColor.bind(this));
    },
    gotColor: function (t, color) {
        var a = t == "apple" ? "An " : "A ";
        $("div").text(a + t + " is " + color);
    }
}

var colors = {
    banana: "yellow",
    apple: "red",
    lime: "green",
    getColor: function (t, cb) {
        cb(t.toString(), this[t]);
    }
}

// change the fruit parameter
fruit.getColor("banana");


if (!Function.prototype.bind) {
    Function.prototype.bind = function (oThis) {
        if (typeof this !== "function") {
            // closest thing possible to the ECMAScript 5 internal IsCallable function
            throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
        }

        var aArgs = Array.prototype.slice.call(arguments, 1),
            fToBind = this,
            fNOP = function () {},
            fBound = function () {
                return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
                aArgs.concat(Array.prototype.slice.call(arguments)));
            };

        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP();

        return fBound;
    };
}