code: function Cache(config) {
        this.config = config != null ? config : {};
        this.get = bind(this.get, this);
        this.isFresh = bind(this.isFresh, this);
        this.remove = bind(this.remove, this);
        this.set = bind(this.set, this);
        this.timestamp = bind(this.timestamp, this);
        this.alias = bind(this.alias, this);
        this.makeRoomForAnotherKey = bind(this.makeRoomForAnotherKey, this);
        this.keys = bind(this.keys, this);
        this.log = bind(this.log, this);
        this.clear = bind(this.clear, this);
        this.isCachable = bind(this.isCachable, this);
        this.isEnabled = bind(this.isEnabled, this);
        this.normalizeStoreKey = bind(this.normalizeStoreKey, this);
        this.expiryMillis = bind(this.expiryMillis, this);
        this.maxKeys = bind(this.maxKeys, this);
        this.store = this.config.store || new up.store.Memory();
      }
docs: *
  @constructor
  @param {number|Function(): number} [config.size]
  Maximum number of cache entries.
  Set to `undefined` to not limit the cache size.
  @param {number|Function(): number} [config.expiry]
  The number of milliseconds after which a cache entry
  will be discarded.
  @param {string} [config.logPrefix]
  A prefix for log entries printed by this cache object.
  @param {Function(entry): string} [config.key]
  A function that takes an argument and returns a string key
  for storage. If omitted, `toString()` is called on the argument.
  @param {Function(entry): boolean} [config.cachable]
  A function that takes a potential cache entry and returns whether
  this entry  can be stored in the hash. If omitted, all entries are considered
  cachable.