Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
Node.js中的Javascript使用具有不同签名的函数_Javascript_Node.js_Function_Parameters_Overloading - Fatal编程技术网

Node.js中的Javascript使用具有不同签名的函数

Node.js中的Javascript使用具有不同签名的函数,javascript,node.js,function,parameters,overloading,Javascript,Node.js,Function,Parameters,Overloading,query(userOptions)和query(…args)之间有什么区别?我知道它们可能是同一个函数调用的重载,但我不确定它们实际上是如何调用的,也不确定在调用程序中在什么情况下选择使用哪个重载,特别是在静态装饰中 class Gamedig { constructor() { this.queryRunner = new QueryRunner(); } async query(userOptions) { return await

query(userOptions)
query(…args)
之间有什么区别?我知道它们可能是同一个函数调用的重载,但我不确定它们实际上是如何调用的,也不确定在调用程序中在什么情况下选择使用哪个重载,特别是在
静态
装饰中

class Gamedig {
    constructor() {
        this.queryRunner = new QueryRunner();
    }

    async query(userOptions) {
        return await this.queryRunner.run(userOptions);
    }

    static getInstance() {
        if (!singleton) singleton = new Gamedig();
        return singleton;
    }
    static async query(...args) {
        return await Gamedig.getInstance().query(...args);
    }
}
表示将函数分配给构造函数,即
Gamedig
。该函数称为

Gamedig.query(...)
如果没有
static
,则在
Gamedig
,即

var instance = new Gamedig();
instance.query(...);
JavaScript不支持函数重载


userOptions
vs
…args
与此无关。函数定义中的参数表示函数接受可变数量的参数,并且这些参数都收集在分配给该参数的数组中(
args

例如:

函数foo(…条){
控制台日志(bar);
}
傅(1),;
foo(1,2);

foo(1,2,3)MDN是一个很好的参考源和完美答案。如果这是个老生常谈的问题,那就谢谢你了。这个特殊的程序来自一个库,它可以从包含的命令行版本调用,也可以作为一个库调用到更大的应用程序中。也许这就是2个查询函数的原因。我怀疑不深入ES6类的人会被“静态意味着函数被分配给构造函数”所迷惑。我假定您指的是这样一个事实,即您可以通过
instance.constructor.query(…)
以及
Gamedig.query(…)
调用静态方法。