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