Modules – AMD Example, CommonJS format

by Joshua McNeese

HTML

<script src="https://requirejs.org/docs/release/2.1.22/minified/require.js"></script>

JavaScript

// canine.js
define(function (require, exports) {

    function Canine(name) {
        this.name = name;
        this.howler = true;
    }

    Canine.prototype.bark = function () {
        return this.name + ' says: ' + (this.howler ? 'woooooow!' : 'woof, woof!');
    };

    exports.Canine = Canine;

});

// dog.js
define(function (require, exports) {

	var Canine = require('canine').Canine;

    function Dog(name, breed) {
        Canine.call(this, name);
        this.breed = breed;
        this.howler = breed === 'husky';
    }
    Dog.prototype = Object.create(Canine.prototype);

    exports.Dog = Dog;

});

// wolf.js
define(function (require, exports) {

	var Canine = require('canine').Canine;

    function Wolf(name) {
        Canine.call(this, name);
    }
    Wolf.prototype = Object.create(Canine.prototype);

    exports.Wolf = Wolf;

});

// canines.js
define(function (require, exports) {

	var Wolf = require('wolf').Wolf;
	var Dog = require('dog').Dog;

    return {
        Dog: Dog,
        Wolf: Wolf
    };

});

// app.js
require(function (require, exports) {

	var canines = require('canines');

    var wolf1 = new canines.Wolf('Ghost');
    console.log(wolf1.bark());

    var dog1 = new canines.Dog('Bandit', 'husky');
    console.log(dog1.bark());

    var dog2 = new canines.Dog('Patches', 'blue heeler');
    console.log(dog2.bark());

});