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

10-17 02:58