将变量参数传递给超类构造函数的最佳/推荐方法是什么?背景解释了我试图解决的问题。
背景
我将一些代码从Java移植到Javascript。 Java具有的编码模式之一是函数重载。 Java选择最佳匹配来确定要调用的函数。当函数是Class构造函数方法时,这会变得很有趣。
因此Java中的代码可能是
public class MyParser extends Parser {
public int parse(String str) { super(str); ... }
public int parse(String str, int base) { super(str, base); ... }
}
在Javascript中变为:
class MyParser extends Parser {
constructor(){
super(arguments); // THIS DOES NOT WORK
if (arguments.length === 1 && typeof arguments[0] === 'string'){
constructor_1arg(arguments[0]);
} else if (...){
constructor_2args(arguments[0], arguments[1]);
}
}
}
所以我想知道处理这种情况的最佳方法是什么?
可能的解决方案
注意:我问这个是因为调用super()是构造函数中的一个特例,你只能调用一次。所以我没想到这会起作用,但确实如此(在NodeJS v8.2中)。
class MyParserTry2 extends Parser {
constructor(){
console.log('MyParser2 passed ' + arguments.length + ' args. ', arguments);
if (arguments.length === 1 && typeof arguments[0] === 'string'){
super(arguments[0]);
this.constructor_1arg(arguments[0]);
} else if (arguments.length === 2 && typeof arguments[0] === 'string'){
super(arguments[0], arguments[1]);
this.constructor_2args(arguments[0], arguments[1]);
}
}
constructor_1arg(arg1){ }
constructor_2args(arg1, arg2){ }
}
我认为必须在其他代码之前调用super(),但这可能来自另一种语言。 Javascript标准是否支持调用super(),如此代码段所示?
以前的答案/研究
我搜索了StackOverflow的答案,发现了几个类似的问题,但没有找到这个问题。我发现了这些问题或帖子:
然而,以上都没有回答我的问题。
那么......将变量参数传递给超类构造函数的最佳/推荐方法是什么?
答案 0 :(得分:5)
class SomeClass extends SomeSuperClass {
constructor(...args){ super(...args); }
}
不推荐使用arguments
,因此您可以使用rest / spread运算符。