docs: function inspectConstructor(target, cache) {
          // If browser has no define property it means it is too old and
          // in that case we return the target itself.
          // This could be improved but I think it does not worth the trouble
          if (!hasDefineProperty) {
              return target;
          }
  
          var def,
              methodsCache,
              propertiesCache,
              membersCache,
              obj,
              tmp,
              key;
  
          obj = fetchCache(target, cache.constructors);
          if (obj) {
              return obj;
          }
  
          def = target[$class];
          obj = def.simpleConstructor;
          methodsCache = target[cacheKeyword].methods;
          propertiesCache = target[cacheKeyword].properties;
  
          cache.constructors.push({ target: target, inspect: obj });
  
          // Constructor methods
          for (key in methodsCache) {
              obj[key] = inspect(methodsCache[key], cache, true);
          }
  
          // Constructor properties
          for (key in propertiesCache) {
              tmp = propertiesCache[key];
              obj[key] = inspect(tmp, cache, true);
          }
  
          // Handle constructor undeclared properties
          methodsCache = def.methods;
          propertiesCache = def.properties;
          for (key in target) {
              if (hasOwn(target, key) && !hasOwn(obj, key) && !propertiesCache[key] && !methodsCache[key]) {
                  obj[key] = inspect(target[key], cache, true);
              }
          }
  
          obj = obj.prototype;
  
          // Prototype members
          target = target.prototype;
          membersCache = def.ownMembers;
          methodsCache = def.methods;
          propertiesCache = def.properties;
  
          for (key in membersCache) {
              tmp = methodsCache[key] ? methodsCache[key].implementation : propertiesCache[key].value;
              obj[key] = inspect(tmp, cache, true);
          }
  
          // Handle undeclared prototype members
          for (key in target) {
              if (hasOwn(target, key) && !hasOwn(obj, key) && !membersCache[key]) {
                  obj[key] = inspect(target[key], cache, true);
              }
          }
  
          return obj;
      }