簡體   English   中英

Javascript將變量參數傳遞給超類構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM