JSFiddle - React, Tailwind, and code Playground

by willseitz

JavaScript

function CacheObject() {
    var self = this;
    self.nameCounter = 0;
    self.data = {};
    self.cacheFn = function(fn) {
        var cacheObject = self;
        var name = cacheObject.makeName();
        return function() {
            if (cacheObject.data[name] == undefined) {
                var cacheMe = fn();
                cacheObject.data[name] = cacheMe;
            }
            return cacheObject.data[name];
        }
    };
    self.makeName = function() {
        return self.nameCounter++;
    };
    self.clearCache = function() {
        self.data = {};
    };
}
var cachedThree
function gimmeThree() {
    console.log("RUNNING ---- three");
    return 3;
}

function gimmeObject() {
    console.log("RUNNING ---- object");
    return { foo: 6, bar: "hey" };
}

function gimmeFive() {
    console.log("RUNNING ---- five");
    return "five";
}

var myCacher = new CacheObject();
gimmeThree = myCacher.cacheFn(gimmeThree);
gimmeObject = myCacher.cacheFn(gimmeObject);
var cacher2 = new CacheObject();
gimmeFive = cacher2.cacheFn(gimmeFive);

console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());
console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());
console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());
console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());

myCacher.clearCache();

console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());
console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());
console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());
console.log(gimmeThree());
console.log(gimmeObject());
console.log(gimmeFive());