绑定函数上下文

创建一个函数,使用给定的上下文调用 fn,可选择在参数前面添加任何额外的参数。

  • 返回一个使用 Function.prototype.apply() 将给定的 context 应用于 fn 的函数。
  • 使用扩展运算符 (...) 将任何额外的参数添加到参数列表中。
const bind = (fn, context, ...boundArgs) => (...args) =>
  fn.apply(context, [...boundArgs, ...args]);

function greet(greeting, punctuation) {
  return greeting + ' ' + this.user + punctuation;
}
const freddy = { user: 'fred' };
const freddyBound = bind(greet, freddy);
console.log(freddyBound('hi', '!')); // 'hi fred!'