I would like to have a fully asynchronous method for loading modules' files on the client side, without the need of extra tools, such as requireJS. My module template follows the "Revealing module pattern" template.
In my file root.js I have
root = (function(thisModule){
//I'm stuck here, I know I need to add the already
//existent properties of thisModule into here
//when child.js is loaded first
function A(){...}
function B(){...} //public method
return{
B:B
};
})(root || {});
In my file child.js I have
root = root || {};
root.child = (function(){
function C(){...}
function D(){...} //public methods
return{
D:D
};
})();
How do I rewrite the first module in root.js such that the files' loading order is irrelevant? That is, the following code will never throw an exception.
$.when($.getScript("root.js"), $.getScript("child.js")).done(function(){
root.B;
root.child.D;
});
The simplest tweak to your code would be to preserve the contents of
thisModule- just assign to theBproperty ofthisModuleand then returnthisModuleinstead of returning only{ B:B }:If
rootis meant to be global, then it might be a bit clearer if you explicitly refer towindow.root, otherwise you might encounter bugs if you accidentally put that snippet somewhere other than at the top level:As a side note, assuming your build process uses Babel (which any serious project should), you can consider using shorthand properties to reduce syntax noise, eg:
rather than
which could be helpful if the method names are long - less syntax noise.