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

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

本文关键字:javascript 类方法 调用 输入 于通过 exports      更新时间:2023-09-26

这里的问题与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

在一个相关的注意事项上,有没有一些好的教程来解释所有这些导出和require/import/include的变化?

这与导出的工作方式无关。现在,假设出口按照您认为的方式工作,没有有趣的encoder('+/')业务。换句话说,exports只是以一种简单的方式导出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


所以要澄清:

会这样调用它吗?编码器('+/' + data);

没有

。它是这样调用的:

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