define.js

To define any module we use define function.

Define Module

MyFirstModule.js
define({
    name : "MyFirstModule"
}).as(function( MyFirstModule){

    return {
        sayGoodMorning : function(name){
            console.log("Good Morning, " + name);
        },
        sayGoodNight : function(name){
            console.log("Good Night, " + name);
        }
    };

});

Using MyFirstModule

module("MyFirstModule", function(MyFirstModule){
    MyFirstModule.sayGoodMorning("Lalit");
});

//Or we can also create instance of MyFirstModule, which follows prototype-chain

module("MyFirstModule", function(MyFirstModule){
    var myMod = MyFirstModule.instance();
    myMod.sayGoodMorning("Lalit");
});

Inheritence

To extend module from another module

define({
    name : "MySecondModule",
    extend : ["MyFirstModule"]
}).as(function( MySecondModule){

    return {
        saySomething : function(isMorning,name){
            if(isMorning){
                return this.parent().sayGoodMorning.call(this,name);
            } else {
                return this.parent().sayGoodNight.call(this,name);
            }
        }
    };

});

Module depenedncy

define({
    name : "MyThirdModule",
    using : ["MySecondModule","TimeUtil"]
}).as(function( MyThirdModule, MySecondModule, TimeUtil){

    return {
        greet : function(name){
            return MySecondModule.saySomething(name,TimeUtil.isMoring())
        }
    };

});