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();