绑定对象的函数里的 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'