namespaced IIFE

by jmjpro

HTML

Open the console to see the output
<div id="hello">World</div>

JavaScript

//globals
dependency2 = 'dep2';
dependency3 = 'dep3';
dependency4 = 'dep4';

// define a namespaced IIFE
com = typeof com === 'undefined' ? {} : com;
com.domain = typeof com.domain === 'undefined' ? {} : com.domain;
com.domain.module = typeof com.domain.module === 'undefined' ? {} : com.domain.module;
com.domain.module.MyClass = function( libraries ) {

  return libraries( jQuery || Zepto, dependency2, dependency3, dependency4 );

}(function($, dependency2, dependency3, dependency4 ) {
    function MyClass() {
        console.log('dependency2 => ' + dependency2);
        console.log('dependency3 => ' + dependency3);
        console.log('dependency4 => ' + dependency4);
    }
    MyClass.prototype.myJQueryDependentMethod = function(param) {
        $(function() {
          console.log('called myMethod with param' + param);
          console.log('Hello ' + $('#hello').text());
        });
    };
    
    return new MyClass(jQuery);
});

// use namespaced IIFE
com.domain.module.MyClass.myJQueryDependentMethod('some param');