Calling Super with var args

by Patrick Steranka

JavaScript

class Parser {
    constructor(){
        console.log('Parser passed ' + arguments.length + ' args. ', arguments);
    }
}


class MyParser extends Parser {
    constructor(){
        console.log('MyParser passed ' + arguments.length + ' args. ', arguments);
        super(arguments);
        if (arguments.length === 1 && typeof arguments[0] === 'string'){
            this.constructor_1arg(arguments[0]);
        } else if (arguments.length === 2 && typeof arguments[0] === 'string'){
            this.constructor_2args(arguments[0], arguments[1]);
        }
    }

    constructor_1arg(arg1){
        // Nothing to do
    }

    constructor_2args(arg1, arg2){
        // Nothing to do
    }
}

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){
        // Nothing to do
    }

    constructor_2args(arg1, arg2){
        // Nothing to do
    }
}

class MyParserTry3 extends Parser {
    constructor(){
        console.log('MyParser3 passed ' + arguments.length + ' args. ', arguments);
        super(...arguments);
        if (arguments.length === 1 && typeof arguments[0] === 'string'){
            this.constructor_1arg(arguments[0]);
        } else if (arguments.length === 2 && typeof arguments[0] === 'string'){
            this.constructor_2args(arguments[0], arguments[1]);
        }
    }

    constructor_1arg(arg1){
        // Nothing to do
    }

    constructor_2args(arg1, arg2){
        // Nothing to do
    }
}

console.log('-------------------------');
var parser2 = new MyParser('123',...