1

在我们实际使用中,经常用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);

4.拓展阅读


LeuisKen
2.3k 声望1.2k 粉丝

专注WEB前端开发,欢迎加入前端自学互助交流群:240528099。