绑定对象的所有方法

将对象的所有方法绑定到对象本身,覆盖现有的方法。

  • 使用Array.prototype.forEach()遍历给定的fns
  • 为每个方法返回一个函数,使用Function.prototype.apply()将给定的上下文(obj)应用于fn
const bindAll = (obj, ...fns) =>
  fns.forEach(
    fn => (
      (f = obj[fn]),
      (obj[fn] = function() {
        return f.apply(obj);
      })
    )
  );

let view = {
  label: 'docs',
  click: function() {
    console.log('clicked ' + this.label);
  }
};
bindAll(view, 'click');
document.body.addEventListener('click', view.click);
// 当点击时,输出'clicked docs'。