function(moduleDefinition) {
      var ModuleClass = Marionette.Module;
  
      if (!moduleDefinition) {
        return ModuleClass;
      }
  
      // If all of the module's functionality is defined inside its class,
      // then the class can be passed in directly. `MyApp.module("Foo", FooModule)`.
      if (moduleDefinition.prototype instanceof ModuleClass) {
        return moduleDefinition;
      }
  
      return moduleDefinition.moduleClass || ModuleClass;
    }
function(moduleDefinition) {
      var ModuleClass = Marionette.Module;
  
      if (!moduleDefinition) {
        return ModuleClass;
      }
  
      
      
      if (moduleDefinition.prototype instanceof ModuleClass) {
        return moduleDefinition;
      }
  
      return moduleDefinition.moduleClass || ModuleClass;
    }
function ( moduleDefinition ) { var ModuleClass = Marionette . Module ; if ( ! moduleDefinition ) { return ModuleClass ; } // If all of the module's functionality is defined inside its class, // then the class can be passed in directly. `MyApp.module("Foo", FooModule)`. if ( moduleDefinition . prototype instanceof ModuleClass ) { return moduleDefinition ; } return moduleDefinition . moduleClass || ModuleClass ; }
## Module Classes  Module classes can be used as an alternative to the define pattern. The extend function of a Module is identical to the extend functions on other Backbone and Marionette classes. This allows module lifecyle events like `onStart` and `onStop` to be called directly.
## Module Classes Module classes can be used as an alternative to the define pattern . The extend function of a Module is identical to the extend functions on other Backbone and Marionette classes . This allows module lifecyle events like onStart and onStop to be called directly .