docs: function factory(BaseClass, mapFunction) {
    function subject(value) {
      if (typeof mapFunction === 'function') {
        value = mapFunction.apply(undefined, arguments);
      } else if (typeof mapFunction !== 'undefined') {
        value = mapFunction;
      }
      subject.onNext(value);
      return value;
    }
    
    for (var key in BaseClass.prototype) {
      subject[key] = BaseClass.prototype[key];
    }
  
    BaseClass.apply(subject, [].slice.call(arguments, 2));
  
    return subject;
  }