if (!Function.prototype.bind) {
Function.prototype.bind = function () {
var self = this, // 保存原函数
context = [].shift.call(arguments), // 保存需要绑定的this上下文
args = [].slice.call(arguments); // 剩余的参数转为数组
return function () { // 返回一个新函数
self.apply(context,[].concat.call(args, [].slice.call(arguments)));
}
}
}

https://www.cnblogs.com/liubingyjui/p/10799019.html

// 实现一个函数柯里化的原生bind方法  
Function.prototype._bind = function (context) {
  let self = this;
  let firstArg = Array.prototype.slice.call(arguments,1);
  return function () {
    let secArg = Array.prototype.slice.call(arguments);
    let finishArg = firstArg.concat(secArg);
    return self.apply(context,finishArg);
  }
}