在我们实际使用中,经常用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);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。