Revision: 58726
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 30, 2012 22:30 by timsommer
Initial Code
var basketModule = (function () { var basket = []; //private function doSomethingPrivate() { //... } function doSomethingElsePrivate() { //... } return { //exposed to public addItem: function (values) { basket.push(values); }, getItemCount: function () { return basket.length; }, doSomething: doSomethingPrivate(), getTotal: function () { var q = this.getItemCount(), p = 0; while (q--) { p += basket[q].price; } return p; } } }()); // basketModule is an object with properties which can also be methods basketModule.addItem({ item: 'bread', price: 0.5 }); basketModule.addItem({ item: 'butter', price: 0.3 }); console.log(basketModule.getItemCount()); console.log(basketModule.getTotal()); // however, the following will not work: console.log(basketModule.basket); // (undefined as not inside the returned object) console.log(basket); //(only exists within the scope of the closure)
Initial URL
Initial Description
The module pattern was originally defined as a way to provide both private and public encapsulation for classes in conventional software engineering. In JavaScript, the module pattern is used to further emulate the concept of classes in such a way that we're able to include both public/private methods and variables inside a single object, thus shielding particular parts from the global scope. What this results in is a reduction in the likelihood of your function names conflicting with other functions defined in additional scripts on the page.
Initial Title
Javascript Module Pattern
Initial Tags
javascript
Initial Language
JavaScript