2016-07-24 150 views
0

首先,我很久以前就从这个网站获得了很多帮助,尽管我只是刚刚注册。感谢所有在这里分享知识的人!javascript“=>”运营商

我刚开始学习JavaScript一个星期,以建立一个Firefox插件,所以请裸露在我身边,并为我的noobish问题和soso英语语法抱歉。
https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Unit_testing
在MDN的上述链接中,它解释了如何编写单元测试来开发Firefox的插件。不过,有几段我不明白,并且在搜索google后没有找到任何有用的结果。
第一个:
以下是从上述链接qauted段落:

在网页中,则可以使用 BTOA()和ATOB()函数执行Base64编码和解码。不幸的是,这些函数是 附加到窗口对象:因为此对象不可用于 您的主要附加代码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);<br /> exports.btoa = b => btoa(b);
我理解的部分
exports.atob
使ATOB功能可从其它类中的“base64.js”之外。
但以下内容是什么意思?
= a => atob(a);
我没有发现JavaScript有“=>”运算符!

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

预先感谢您!

回答

0

对于引用的段落中的“平台”,它们表示的是一组功能,它不是严格的Firefox浏览器代码,而是实现基本的共享功能。这通常位于mozilla中央存储库中的toolkit/modules。 Services.jsm居住在那里,所以是的,那是平台的一部分。而且,atobbtoa都是从Services.jsm中导入的。

exports.atob = a => atob(a);中的箭头=>定义了什么叫arrow function:这是一个新的,更短的语法来定义JavaScript中的函数。 This SO答案有很多关于它的有用信息。

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

这几乎是正确的:您需要从底层平台导出函数,因为您没有窗口对象。如果你有一个窗口对象,你会刚刚完成window.atob或类似的东西。该调用仍然会调用您从Services.jsm导入的相同功能。

所以,你没有使用Services.jsm来获得对窗口对象的引用,而是直接导入所需的函数,以便不需要窗口对象。

+0

非常感谢您的详细解释!
我可以说Services.jsm是导出所有绑定到https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa windowbase64的函数的桥梁吗? – ganor

+0

Grrrr ...我只能编辑5分钟的评论,抱歉以下评论! 所以我可以说Services.jsm可以用来导出所有没有窗口相关对象不可用的函数吗?或者它是个案情况? 我不能相信'=>'在论坛上被回答过!我确实搜索“=>”,但没有出现......真的很感谢! – ganor

+0

没问题! Services.jsm可以用来导出在那里定义的所有函数,这可能或不可能是函数。 – Dexter