在我们实际运用中,经经常运用ES6的箭头函数来替代Function.prototype.bind()
.
1.提取对象的要领
假如将一个对象的要领作为回调函数传入,你须要定义一个肯定的this
,不然它将作为一个函数来实行(this值多是undefined, 也多是全局对象).比方:
obj.on('anEvent', console.log.bind(console))
另一种解决方案就是运用箭头函数:
obj.on('anEvent', x => console.log(x))
译者注: 原文批评中也提到了ES7的绑定运算符, 以下:
obj.on('anEvent', ::console.log)
2.this作为参数
下面的代码展现了一个小技能:关于一些要领,你能够不须要用bind()
来为回调函数绑定this
,这类要领许可你在分外的参数中定义this
的值..filter()
就是如许一类要领:
const as = new Set([1, 2, 3]);
const bs = new Set([3, 2, 4]);
const intersection = [...as].filter(bs.has, bs);
// [2, 3]
假如说你运用了箭头函数,代码会越发清楚易读:
const as = new Set([1, 2, 3]);
const bs = new Set([3, 2, 4]);
const intersection = [...as].filter(a => bs.has(a));
// [2, 3]
3.部份赋值
bind()
许可你设定一个函数部份参数的值,你能够借由一个已有的函数,为它设定部份参数的值,然后建立一个新的函数:
function add(x, y) {
return x + y;
}
const plus1 = add.bind(undefined, 1);
再一次,我找到了运用箭头函数简化它的要领:
const plus1 = y => add(1, y);