JSFiddle - React, Tailwind, and code Playground

by Jon-Carlos Rivera

JavaScript

function Person(name) {
    this._name = name;
}

Person.prototype = {
    sayName: function () {
        return this._name;
    }
};

Person.extend = function extend(obj) {
    var parent = this,
        prop;

    var target = Object.create(parent.prototype);

    for (prop in parent) {
        if (parent.hasOwnProperty(prop)) {
            target[prop] = parent[prop]
        }
    }

    for (prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            target[prop] = obj[prop]
        }
    }
    
    var constructify = function(){
        parent.apply(this, arguments);
    };
    
    constructify.prototype = target;
    return constructify;
};

var Parent = Person.extend({
    sleep: function () {
        return 'snooore';
    }
});

var Dog = Person.extend({
    sayName: function () {
        return this._name + ' says woof!';
    }
});

var parent = new Parent('R0ckET');
alert(parent.sayName()); // R0ckET
alert(parent.sleep());

// Doggy
alert(new Dog('Spot').sayName());