30秒学会 JavaScript 片段 · 2020年5月30日

30秒学会 JavaScript 片段 – bindAll

绑定对象的函数里的 this 到对象本身。

使用 Array.prototype.forEach() 来遍历对象里所有指定的函数,使用 Function.prototype.apply() 来指定函数中 this 的上下文为对象本身,再覆盖原先的函数。

代码片段

const bindAll = (obj, ...fns) =>
  fns.forEach(
    fn => (
      (f = obj[fn]),
      (obj[fn] = function() {
        return f.apply(obj);
      })
    )
  );

使用样例

var view = {
  label: 'docs',
  click: function() {
    console.log('clicked ' + this.label);
  }
};
bindAll(view, 'click');
jQuery(element).on('click', view.click); // 点击时会输出日志 'clicked docs'