关于通过 exports 导出的 javascript class 方法调用的输入

About input to a javascript class method call that's exported via exports

这里的问题与 ExtendScript 代码有关,但我认为它应该与任何 javascript 实现无关。

如果我们在 JS 库文件中有这样的东西 (base64.js)

exports.encode64 = encoder('+/');
//...
function encoder(extra) {
//...
}

然后在另一个使用导出方法的文件中,第一个 imports/includes/requires base64.js 某处

var data = "some data";
base64.encode64(data);

这是否意味着如果我们不导出方法并直接调用 encoder(),假设 base64.js 是 "included" 到执行代码的全局命名空间,那么我们将调用它像这样?

encoder('+/' + data);

到目前为止,我看到的导出通常导出一个没有参数的方法,该方法将别名分配给暴露在 library/file 之外的 function/method。但是这里的这个case对我来说很奇怪,因为我们传入了argument,后来调用别名的时候也传入了argument

如果我的假设不正确,那么匹配 base64.encode64 别名的编码器的正确用法是什么?

reference/context base64.js 的完整源代码可以在这里找到:

https://github.com/debrouwere/Extendables/blob/master/dependencies/base64.js

在相关说明中,是否有一些很好的教程可以解释所有这些导出和 require/import/include 的变化?

这与导出的工作方式无关。现在,假设出口以您认为没有有趣的 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()不是编码函数。但是它确实 return 编码功能(它 "writes" 为你):

var encode64 = encoder('+/');
// encode64 is a function

所以库只是导出(未命名的)encode64 函数,而不是 encoder


所以澄清一下:

would call it like this? encoder('+/' + data);

。它这样称呼它:

var encode64 = encoder('+/');
encode64(data);