JSFiddle - React, Tailwind, and code Playground

JavaScript

function Animal(arg) {
    var a = arg;

    //privileged function has access to private variable
    this.sayHi = function(name) {
        // can access a here if needed
        alert('Hi: ' + name);
    }
}

function Person(arg) {
    this.sayHi = function(name) {
        super.sayHi(name + '!!!');
    };
}

Person.inheritsFrom(Animal);

Function.prototype.inheritsFrom = function(parent) {
	if(parent.constructor == Function) { //Normal Inheritance
		this.prototype = new parent;
		this.prototype.constructor = this;
		this.prototype.parent = parent.prototype;
	} else  { //Pure Virtual Inheritance
		this.prototype = parent;
		this.prototype.constructor = this;
		this.prototype.parent = parent;
	}
	return this;
}

var animal = new Animal('cow');
animal.sayHi('John'); // Hi: John

var person = new Person('adult');
person.sayHi('Fred'); // Hi: Fred!!!