什么是“=>”操作者?

时间:2016-07-24 05:47:27

标签: firefox

在MDN的this link中,它解释了如何编写单元测试以开发firefox的插件。但是,在搜索谷歌之后,有几个我不理解的段并且没有找到任何有用的结果。

第一个,以下是从上面链接引用的段落:

  

在网页中,您可以使用。执行Base64编码和解码   btoa()和atob()函数。不幸的是这些功能   附加到窗口对象:因为此对象不可用   您的主要附加代码,atob()和btoa()也不可用。所以   我们将创建一个base64模块来公开这些函数   平台(请参阅创建可重用模块)。

上段中的“平台”是什么意思? “Services.jsm”?

同样在以下代码中:

const { atob, btoa } = require("resource://gre/modules/Services.jsm");

这使得atob和btoa成为其他类可用的服务之一?或者使(常量变量)atob和btoa都引用Services.jsm?

第二个: 这两行代码是做什么的?

exports.atob = a => atob(a);
exports.btoa = b => btoa(b);

我理解这部分

exports.atob

使atob函数可以从“base64.js”之外的其他类中获得。 但以下是什么意思?

= a => atob(a);

我没有发现javascript有“=>”操作者!

从我的理解,我们创建base64.js的原因是因为只有拥有window对象才能调用atob和btoa。因此,我们可以使用Services.jsm来获取窗口对象的引用吗?

1 个答案:

答案 0 :(得分:1)

对于"平台"在你引用的段落中,它们指的是一组功能,它们不是严格的Firefox浏览器代码,而是实现基本的共享功能。这通常位于mozilla-central存储库中的toolkit/modules。 Services.jsm也存在于那里,是的,这是该平台的一部分。此外,atobbtoa都是从Services.jsm导入的。

=>中的箭头exports.atob = a => atob(a);定义了arrow function的内容:它是一种新的,更短的语法,用于在JavaScript中定义函数。 This SO答案有很多有用的信息。

  

根据我的理解,我们创建base64.js的原因是因为只有拥有window对象才能调用atob和btoa。因此,我们可以使用Services.jsm来获取窗口对象的引用吗?

这几乎是正确的:你需要从底层平台导出函数,因为那里没有窗口对象。如果你有一个窗口对象,你就可以完成window.atob或类似的事情。该调用仍将调用您从Services.jsm导入的相同函数。

因此,您并未使用Services.jsm来获取对窗口对象的引用,而是直接导入所需的函数,以便您不需要拥有窗口对象。