Singletons in RequireJS

by Javid Jamae

HTML

<script src="http://requirejs.org/docs/release/2.1.14/minified/require.js"></script>
<pre id="output"></pre>

JavaScript

var nextInstId = 0;
define('impl/myclass', [], function(){
    'use strict';

    var MyClass = (function() {
               
        function MyClass() {
            var self = this,
                _instId = nextInstId++;

            self.write = function(text) {
                $('pre#output').append(_instId + ': ' + text + '\r\n');
            };
        };

        return MyClass;
    })();
           
    return MyClass;
});

define('inst/myclass', ['impl/myclass'], function(MyClass) {
    return new MyClass();
});

// EXAMPLE OF USAGE
require(['inst/myclass'], function (myClass) {
    myClass.write('This is first output from singleton');
});

require(['inst/myclass'], function (myClass) {
    myClass.write('This is second output from singleton');
});

require(['impl/myclass'], function (MyClass) {
    var myClass = new MyClass();
    myClass.write('This is first output from non-singleton');
});

require(['impl/myclass'], function (MyClass) {
    var myClass = new MyClass();
    myClass.write('This is second output from non-singleton');
});

require(['inst/myclass'], function (myClass) {
    myClass.write('This is third output from singleton');
});