这里的问题与ExtendScript代码有关,但是我认为它对任何JavaScript实现都应该是不可知的。
如果我们在JS库文件(base64.js)中有类似的内容
exports.encode64 = encoder('+/');
//...
function encoder(extra) {
//...
}
然后在另一个使用导出方法的文件中,该文件首先在某处导入/包含/需要base64.js
var data = "some data";
base64.encode64(data);
这是否意味着如果我们不导出方法并直接调用encoder(),并假设base64.js被“包含”到执行代码的全局名称空间中,那么我们将这样调用它吗?
encoder('+/' + data);
到目前为止,我所看到的导出通常会导出不带参数的方法,该方法不会为在库/文件外部公开的函数/方法分配别名。但是这种情况对我来说很奇怪,因为我们传入了参数,后来我们在调用别名时也传入了参数。
如果我的假设不正确,那么将匹配base64.encode64别名的编码器的正确用法是什么?
对于参考/上下文,可以在这里找到base64.js的完整源代码:
https://github.com/debrouwere/Extendables/blob/master/dependencies/base64.js
与此相关的是,是否有一些不错的教程可以解释有关导出和需求/导入/包含的所有这些变化?
最佳答案
这与出口的工作方式无关。现在,假设出口的运作方式与您认为有趣的encoder('+/')
业务无关。换句话说,导出仅以简单的方式导出javascript对象(函数,对象,数组等),而无需发明其他语法。假设该行如下所示:
function encode64 (data) { /* ... */ );
exports.encode64 = encode64;
因为那就是它在做什么。诚实。这里没有任何有趣的事情。
现在让我们讨论
encoder()
。您会注意到,该库的作者并未在源代码中的任何地方编写
encode64()
函数的定义。相反,他让另一个函数encoder()
为他编写了encode64()
函数。encoder()
函数可能看起来像这样:function encoder (extra) {
// do some stuff
return function (data) {
// actual implementation of the encoding function
}
}
因此
encoder()
不是编码功能。但是,它确实会返回编码功能(它会为您“编写”):var encode64 = encoder('+/');
// encode64 is a function
因此,库仅导出(未命名的)
encode64
函数,而不是encoder
。所以要澄清一下:
会这样称呼吗?
编码器('+ /'+数据);
不,它这样称呼:
var encode64 = encoder('+/');
encode64(data);
关于javascript - 关于通过导出导出的javascript类方法调用的输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30519803/