JSFiddle - React, Tailwind, and code Playground

JavaScript

function FirstClass() {
        this.name = "First Class";
    }

    FirstClass.prototype.sayName = function () {
        this.callFunction("some_function", "hello")
    }

    FirstClass.prototype.callFunction = function () {
        var func = arguments[0];
        var args = Array.prototype.slice.call(arguments).slice(1, arguments.length)
        if (this[func] !== undefined) {
            this[func].apply(this, args);
        }
    }

    function SubClass() {
        var parent = new FirstClass();

        // this is lightweight example of an "extend" method
        for(var attr in parent) {
            // if this subclass has not over-written an attr,
            // copy the attributes of FirstClass to SubClass
            if(!this[attr]) {
                this[attr] = parent[attr];
            }
        }
        
        return this;
    }
        
    SubClass.prototype.some_function = function (msg) {
        alert(msg + ' ' + this.name);
    }

    var sub_class = new SubClass();
    sub_class.sayName();