docs: function inheritParent(constructor, parent) {
          var x,
              binds = parent[$class].binds,
              key,
              value,
              classId = constructor[$class].id;
  
          // Inherit binds
          for (x = binds.length - 1; x >= 0; x -= 1) {
              if (binds[x].substr(0, 2) !== '__') {
                  constructor[$class].binds.push(binds[x]);
              }
          }
  
          // Inherit methods and properties
          for (key in parent[$class].methods) {
              value = parent[$class].methods[key];
              constructor[$class].methods[key] = value;
  
              if (value.isProtected) {
                  value.allowed.push(classId);
              }
          }
  
          for (key in parent[$class].properties) {
              value = parent[$class].properties[key];
              constructor[$class].properties[key] = value;
  
              if (value.isProtected) {
                  value.allowed.push(classId);
              }
          }
  
          // Inherit static methods and properties
          for (key in parent[$class].staticMethods) {
              value = parent[$class].staticMethods[key];
  
              if (!value.isPrivate) {
                  constructor[$class].staticMethods[key] = value;
                  constructor[key] = value.implementation;
  
                  if (value.isProtected) {
                      value.allowed.push(classId);
                  }
              }
          }
  
          for (key in parent[$class].staticProperties) {
              value = parent[$class].staticProperties[key];
  
              if (!value.isPrivate) {
                  constructor[$class].staticProperties[key] = value;
                  constructor[key] = value.value;
                  if (value.isProtected) {
                      value.allowed.push(classId);
                  }
  
              }
          }
  
          // Make inheritance also for the simple constructor (for the inspect)
          if (hasDefineProperty) {
              inheritPrototype(constructor[$class].simpleConstructor, parent[$class].simpleConstructor);
          }
  
          // Inherit locked and forceUnlocked
          if (hasOwn(parent[$class], 'locked')) {
              constructor[$class].locked = parent[$class].locked;
          }
          if (hasOwn(parent[$class], 'forceUnlocked')) {
              constructor[$class].forceUnlocked = parent[$class].forceUnlocked;
          }
  
          obfuscateProperty(constructor, '$parent', parent);
  
          // Inherit implemented interfaces
          constructor[$class].interfaces = [].concat(parent[$class].interfaces);
      }