Skip to content

Instantly share code, notes, and snippets.

@jgdoncel
Forked from sdd/Module.js
Created January 21, 2019 11:37
Show Gist options
  • Save jgdoncel/d4cdda7e49022cc8f0c78ae86cbe242e to your computer and use it in GitHub Desktop.
Save jgdoncel/d4cdda7e49022cc8f0c78ae86cbe242e to your computer and use it in GitHub Desktop.
Javascript Module pattern template. Shows a class with a constructor and public/private methods/properties. Also shows compatibility with CommonJS(eg Node.JS) and AMD (eg requireJS) as well as in a browser.
/**
* Created with JetBrains PhpStorm.
* User: scotty
* Date: 28/08/2013
* Time: 19:39
*/
;(function(global){
"use strict";
var M = function() {
// Constructor. arguments are passed
// from Module() call. this refers to m.
function init() {
meth_priv2();
m.meth_pub2();
}
// Empty object, to be populated with
// public properties and methods.
var m = {};
// Private properties. define using var x.
// closure keeps them private.
var prop_priv = "private property";
// public properties. define using m.x.
m.prop_pub = "public property";
// private methods. define as var x = function() {}
// closure keeps them private.
var meth_priv = function() {
console.log(prop_priv);
console.log(m.prop_pub);
};
var meth_priv2 = function() {
// access another priv method
meth_priv();
// access a pub method
m.meth_pub();
};
// public methods. define as m.x = function() {}
// private props/methods accessed via x.
// public props/methods accessed via m.x
m.meth_pub = function() {
console.log(prop_priv);
console.log(m.prop_pub);
};
m.meth_pub2 = function() {
// access a priv method
meth_priv();
// access another pub method
m.meth_pub();
};
// call the constructor
init.apply(m, arguments);
return m;
};
// determine correct export method depending upon
// environment that this script was loaded in:
if (typeof module != 'undefined' && module.exports) {
module.exports = M; // Node / CommonJS...
} else if (typeof define === 'function' && define.amd) {
define('Module', [], M); // or RequireJS / AMD...
} else {
global.Module = M; // or browser
}
})(this.window || global);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment