Javascript Sandbox pattern

HTML

<h1> JS Sandbox pattern example </h1>
<small> Open console </small>

JavaScript

(function(){ 
    
    /* function constructor */
    function Sandbox(){
        //Change arguments to array, as you know 'arguments' are not a true JS array
        //Array.prototype.slice will provide shallow copy of 'arguments'
        var args = Array.prototype.slice.call(arguments),
            //remove last element from array and return it to caller
            //our last argument is callback
            callback = args.pop(), 
            //We can pass modules as strings or as array
            //if first element is a string, take all arguemnts
            //otherwise take one element (array)
            modules = (args[0] && typeof args[0] === "string") ? args : args[0],
            modulesLength = modules.length,
            i;
        
        //handle calling function constructor without 'new' keyword
        if(!(this instanceof Sandbox)){
            //Invoke me again!
            return new Sandbox(modules, callback);
        }
        
        //we can add properties to 'this'
        this.someProp = "Initialized property";
        
        //Initialize all required modules
        for(i = 0; i < modulesLength ; i++){
            //pass reference to 'this' for each required module and invoke it
            //'this' is poiting to new object which was created 
            //after calling new Sandbox()
            Sandbox.modules[modules[i]](this);
        }
        
        //Invoke callback and pass 'this'
        //now 'this' cotains all methods and properties
        //attached in modules functions
        callback(this);
    };
    
    //We can optionally create Sandbox methods
    Sandbox.prototype = {
        version: "1.0.1",
        createdAt: new Date()
    };
    
    /* function as a first class object - saving all modules*/
    Sandbox.modules = {}; 
    
    /*Create $http,$scope and $ajax modules */
    /*We need box object to add new functionality*/
    /*We are creating new methods by attatching them to box obect*/
    /*box is a...