[Javascript] Private, public variables and method in Name Space
/** So far, we've seen a module that has only public properties */ /*The thing with a namespace is that you have to hope that no one else ever uses its name.*/ var ARMORY = { weaponList: [*list of weapon objects*], armorList: [*list of armor objects*], //This namespace has a bunch of public //variables and methods which can still //be accessed by any code that knows //the name of space and its properties. makeWeaponRequest: function(){}, makeArmorRequest: function(){}, removeWeapone: function(){}, replaceWeapon: function(){}, removeArmor: function(){}, replaceArmor: function(){}, } /** What if we wanted some stuff to be accessible only to the module? */ /*First, we need to decide which properties should be public and which should be private*/ var ARMORY = { weaponList: [*list of weapon objects*], //private armorList: [*list of armor objects*], //private makeWeaponRequest: function(){}, //public makeArmorRequest: function(){}, //public removeWeapone: function(){}, //private replaceWeapon: function(){}, //private removeArmor: function(){}, //private replaceArmor: function(){}, //private } /** Javascript's closure feature will allow us to "privatize" properties */ /*As a first visual step, we'll wrap the entire of properties in an annonymous immediately invoked function expression*/ var ARMORY = (function(){{ weaponList = [*list of weapon objects*]; //private armorList = [*list of armor objects*]; //private makeWeaponRequest = function(){}; //public makeArmorRequest = function(){}; //public removeWeapone = function(){}; //private replaceWeapon = function(){}; //private removeArmor = function(){}; //private replaceArmor = function(){}; //private })(); /** Now we will make desired private properties into local executable code */ /*Those local values and methods will eventually be "closed up" into the armory's namespace.*/ var ARMORY = (function(){{ //add var to the private properties var weaponList = [*list of weapon objects*]; //private var armorList = [*list of armor objects*]; //private var removeWeapone = function(){}; //private var replaceWeapon = function(){}; //private var removeArmor = function(){}; //private var replaceArmor = function(){}; //private makeWeaponRequest = function(){}; //public makeArmorRequest = function(){}; //public })(); /** To make some properties public, return an object */ var ARMORY = (function(){{ //add var to the private properties var weaponList = [*list of weapon objects*]; //private var armorList = [*list of armor objects*]; //private var removeWeapone = function(){}; //private var replaceWeapon = function(){}; //private var removeArmor = function(){}; //private var replaceArmor = function(){}; //private return{ makeWeaponRequest = function(){}; //public makeArmorRequest = function(){}; //public }; })();