Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于javascript类方法调用的输入';它是通过出口出口的_Javascript_Node.js_Extendscript - Fatal编程技术网

关于javascript类方法调用的输入';它是通过出口出口的

关于javascript类方法调用的输入';它是通过出口出口的,javascript,node.js,extendscript,Javascript,Node.js,Extendscript,这里的问题与ExtendScript代码有关,但我认为它应该与任何javascript实现无关 如果我们在JS库文件(base64.JS)中有类似的内容 然后在另一个使用导出方法的文件中,首先在某处导入/includes/requires base64.js var data = "some data"; base64.encode64(data); 这是否意味着如果我们不导出该方法并直接调用encoder(),假设base64.js“包含”到执行代码的全局命名空间中,那么我们会这样调用它 e

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

如果我们在JS库文件(base64.JS)中有类似的内容

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

var data = "some data";
base64.encode64(data);
这是否意味着如果我们不导出该方法并直接调用encoder(),假设base64.js“包含”到执行代码的全局命名空间中,那么我们会这样调用它

encoder('+/' + data);
到目前为止,我看到的导出通常导出一个没有参数的方法,该参数为库/文件外部公开的函数/方法指定别名。但这种情况对我来说很奇怪,因为我们传入了参数,后来调用别名时也传入了参数

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

有关参考/上下文,可以在以下位置找到base64.js的完整源代码:


请注意,是否有一些好的教程解释了导出和require/import/include的所有这些变化?

这与导出的工作方式无关。现在,假设导出按照您认为的方式工作,没有有趣的
编码器('+/')
业务。换句话说,exports只是以一种简单的方式导出javascript对象(函数、对象、数组等),而不需要发明额外的语法。假设该行如下所示:

function encode64 (data) { /* ... */ );
exports.encode64 = encode64;
function encoder (extra) {
    // do some stuff
    return function (data) {
        // actual implementation of the encoding function
    }
}
var encode64 = encoder('+/');
encode64(data);
因为它就是这么做的。诚实的这里没什么好玩的


现在让我们讨论
encoder()

您会注意到,该库的作者没有在源代码的任何地方编写
encode64()
函数的定义。相反,他让另一个函数,
encoder()
,为他编写
encode64()
函数

encoder()
函数可能如下所示:

function encode64 (data) { /* ... */ );
exports.encode64 = encode64;
function encoder (extra) {
    // do some stuff
    return function (data) {
        // actual implementation of the encoding function
    }
}
var encode64 = encoder('+/');
encode64(data);
因此,
encoder()
不是编码函数。但是,它会返回编码函数(它会为您“写入”):

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


因此,为了澄清:

你会这样称呼它吗? 编码器('+/'+数据)

。它这样称呼它:

function encode64 (data) { /* ... */ );
exports.encode64 = encode64;
function encoder (extra) {
    // do some stuff
    return function (data) {
        // actual implementation of the encoding function
    }
}
var encode64 = encoder('+/');
encode64(data);

通过查看源代码,
encoder
返回一个函数本身,以允许库作者公开一个相同函数的两个不同版本。您是正确的,他可以将内部方法(在第18行声明)重构为导出的方法,并接受
extra
作为第二个参数,尽管所选择的方法对库的用户来说是一个更友好的界面。为了回答您的“如何调用”问题。如果您直接使用编码器(虽然它实际上没有导出),您可以这样调用它:
var myStr=(编码器(+/
))(数据)`-为了清晰起见,我添加了一个不必要的对参数。谢谢,有用的解释。我忽略了encoder()返回函数的细节。谢谢,我发现Barry Johnson的评论提供了更多信息。但您的示例又增加了这一点,您的示例对用户来说更直观。