[译]箭头函数 vs .bind()

news/2024/7/5 23:28:03

在我们实际使用中,经常用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.拓展阅读

  • Currying versus partial application (with JavaScript code)

  • Uncurrying this in JavaScript


http://www.niftyadmin.cn/n/499592.html

相关文章

rda分析怎么做_群落分析的冗余分析(RDA)概述

约束排序之冗余分析(RDA)概述前篇先后简介了主成分分析(PCA)、对应分析(CA)、主坐标分析(PCoA)以及非度量多维尺度分析(NMDS)。这些排序方法均属于非约束排序,只涉及一个数据矩阵,并在低维空间中尽可能呈现原始的数据结构。非约束排序方法中不存在解释变…

最稳定移动聚合广告平台“KeyMob”

为什么80%的码农都做不了架构师?>>> 随着移动互联网的发展,移动应用广告平台日益火爆。一份报告称移动应用广告平台市场规模将达到40多亿,多家互联网公司纷纷开始推广自家的移动广告平台,成立自己的广告联盟。 KeyMob…

php加载autoload,PHP 自动加载类 __autoload() 方法

__autoload() 方法用于自动加载类。__autoload()在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就需要通过 include 把这个文件引入。不过有的时候,在文件众多的项目中…

python制作生日祝福_python自动发送生日祝福邮件

最近刚开学,班里的事也挺多,大多都涉及到excel的使用。本来我excel用得不是很熟,很多高级的操作都不会。比如给两列的交赋值等。在网上搜了下,发现这些操作的实现都涉及到excel内部的一些命令,而不是简单的鼠标操作。O…

10配置php环境_Window下PHP环境安装

一 独立安装安装介绍Windows系统上分别独立安装Apache2、PHP5、MySQL5和phpMyAdmin等几个软件。独立安装的好处是可以自由选择这些组件的具体版本,清晰地掌握自己计算机里都安装了哪些程序,以及它们的具体配置情况,这将对以后的系统维护和软件…

TF-IDF与余弦相似性的应用(一):自动提取关键词

这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到? 这个…

java编写程序上机实验,《Java程序设计》上机实验

《《Java程序设计》上机实验》由会员分享,可在线阅读,更多相关《《Java程序设计》上机实验(19页珍藏版)》请在技术文库上搜索。1、tor的安装及使用(2) 熟悉Java Application和Applet程序的结构及开发步骤(3) 熟练掌握if语句的使用(4) 掌握Math.sqrt()等常…

python3基础练习_python3基础之“小练习(1)”

(一)打印3个不同的字符1 #aint("123")2 #b"123"3 #c1.24 #print(type(a),a)5 #print(type(b),b)6 #print(type(c),c)(二)编写程序:变量小于10,打印一条消息,大于10,打印不同消息1 #aint(input("plase en…