JSFiddle - React, Tailwind, and code Playground

JavaScript

Object.prototype.extend = function () {
    var hasOwnProperty = Object.hasOwnProperty;
    var object = Object.create(this);
    var length = arguments.length;
    var index = length;

    while (index) {
        var extension = arguments[length - (index--)];

        for (var property in extension)
            if (property !== "clones" &&
                hasOwnProperty.call(extension, property) ||
                typeof object[property] === "undefined")
                    object[property] = extension[property];

        if (hasOwnProperty.call(extension, "clones"))
            extension.clones.unshift(object);
        else extension.clones = [object];
    }

    return object;
};

Object.prototype.instanceof = function (prototype) {
    if (Object.hasOwnProperty.call(prototype, "clones"))
        var clones = prototype.clones;
    var object = this;

    do {
        if (object === prototype ||
            clones && clones.indexOf(object) >= 0)
                return true;

        var object = Object.getPrototypeOf(object);
    } while (object);

    return false;
};

var animal = {
    create: function () {
        return this.extend();
    },
    walk: function () {
        alert("I am walking.");
    }
};

var lion = animal.extend({
    create: function () {
        return animal.create.call(this);
    }
});

var simba = lion.create();

alert(simba.instanceof(lion));
alert(simba.instanceof(animal));

simba.walk();