What does this code do?
<pre><code>Function.prototype.bind = function() {
    var _this = this,
        original = _this,
        args = Array.prototype.slice.call(arguments),
        _obj = args.shift(),
        func = function() {
            var _that = _obj;
            return original.apply(_that, args.concat(
            Array.prototype.slice.call(
            arguments, args.length)));
        };
    func.bind = function() {
        var args = Array.prototype.slice.call(arguments);
        return Function.prototype.bind.apply(_this, args);
    }
    return func;
};
</code></pre>

<p>I know it's a bind function. But I don't understand it and what it's doing, specifically the <code>args.concat</code> part. What does <code>concat</code> do? Also, what does <code>.bind</code> method do that <code>.apply</code> and <code>.call</code> can't?</p>
