= Namespacing & Aliasing Namespaces in JavaScript =
Javascript has an //implied global namespace//. This means any functions, variables, etc. that you create are put into the global namespace by default. If you're writing a lot of JavaScript code, it can be a good idea to put your own code into your own namespace. It's doubly important if you are going to share that code with the world. The [[http://developer.yahoo.com/yui/|Yahoo YUI]] people do this, for example.
To do this, create an object. As a convention, I like to start the name of the object with a $ to indicate it is a namespace. Then declare your functions inside your new namespace. You may even want to declare sub-namespaces to group functions.
// Make sure the $O namespace exists ($O is a random name; it can be anything)
var $O = window.$O || {};
// Create a sub-namespace for admin functions
$O.admin = {};
// create an array in the main $O namespace
$O.usernames = ['dordal','kate','jane'];
// create a function in the admin sub-namespace, that uses a variable from the main namespace.
$O.admin.getUsername = function(arrayIndex) {
return $O.usernames[arrayIndex];
}
**IMPORTANT:** You'll generally want to access any functions with their fully qualified name, e.g. ''$O.admin.getUsername'', not just ''getUsername()''
== Aliasing Namespaces ==
You can alias other people's namespaces (and even functions) to make them easier to remember. I like to do this with the YUI stuff:
var $D = YAHOO.util.Dom;
var $E = YAHOO.util.Event;
var $El = YAHOO.util.Element;
var $ = $D.get;
// Now, I can access functions more simply:
$D.getElementsByClassName('someElementId'); // instead of YAHOO.util.Dom.getElementsByClassName()
// Above, I've even aliased YUI's 'get' function, which means I can get any element simply by saying:
var myElementVar = $('someElementId');