[英]Javascript Passing variable arguments to superclass constructor
將變量參數傳遞給超類構造函數的最佳/推薦方法是什么? 背景解釋了我試圖解決的問題。
背景
我正在將一些代碼從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的答案,發現了幾個類似的問題,但沒有找到這個問題。 我發現了這些問題或帖子:
但是,上述情況都不能回答我的問題。
那么......將變量參數傳遞給超類構造函數的最佳/推薦方法是什么?
class SomeClass extends SomeSuperClass {
constructor(...args){ super(...args); }
}
不推薦使用arguments
,因此您可以使用rest / spread運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.