请教js大神,如下代码意思

if (!Function.prototype.bind)Function.prototype.bind = function (d) {
var a = [].slice,
b = a.call(arguments, 1),
c = this,
g = function () {},
f = function () {
return c.apply(this instanceof g ? this : d || {}, b.concat(a.call(arguments)))
};
g.prototype = c.prototype;
f.prototype = new g;
return f
};

if (!Function.prototype.bind)Function.prototype.bind = function (d) {//如果function方法没有bind,则增加bind方法,针对所有function
var a = [].slice,
b = a.call(arguments, 1),
c = this,
g = function () {},
f = function () {
return c.apply(this instanceof g ? this : d || {}, b.concat(a.call(arguments)))
};
//下面是原型链继承,也就是f可以使用c的方法
g.prototype = c.prototype;
f.prototype = new g;
return f
};