YOU CAN'T. As simple as that. Anyway, what is a constant? A constant is a unchangeable variable that throws an error when you try to write in it. Thus, implementing constant in javascript would be against its will to be opened. The magic of javascript resides in the liberty it gives you to change anything you want, anywhere you want. Even if you're not the owner of the object. Even if it's a javascript intrinsic class. Why would you want to have constants???

Still, everyone wants to use constants (myself included). Here are a couple of ways of doing it without actually doing “it”.

Global constants

Ouch! That one hurts! As I said earlier, global variables are prohibited since 1992 by GVIP (Global Variables International Police). But sometimes, a man gotta do what a man gotta do. If you really can't find any better solution, use this one.

[source:javascript] var DISPLAYTYPESMALL = 0; var DISPLAYTYPEBIG = 1; [/source]

Class constant

If you already know how to create objects you have to use the class functions technique (also knows as static or shared functions) to create a class “constant”.

[source:javascript] // Create the class function TheClass() { }

// Create the class constant TheClass.THE_CONSTANT = 42;

// Create a function for TheClass to alert the constant TheClass.prototype.alertConstant = function() { // You can't access it using this.THECONSTANT; alert(TheClass.THECONSTANT); }

// Alert the class constant from outside alert(TheClass.THE_CONSTANT);

// Alert the class constant from inside var theObject = new TheClass(); theObject.alertConstant(); [/source]

As you saw, you can't access the constant using the this variable (a reference to the current object) because the constant is defined on the class only and not the object.

Class enum

Sometimes, constants are not enough. You need to regroup them to be more logical. Example? I have three different display type : small, medium, big. I could do this

[source:javascript] // Create the class function TheClass() { // Initialize the display type to big this.displayType = TheClass.DISPLAYTYPEBIG; }

// Create constants TheClass.DISPLAYTYPESMALL = 0; TheClass.DISPLAYTYPEMEDIUM = 1; TheClass.DISPLAYTYPEBIG = 2;

// Assign the small display type to the object var theObject = new TheClass(); theObject.displayType = TheClass.DISPLAYTYPESMALL; [/source]

It works but they are not logically grouped. I would prefer to use an enumeration (enum) [more info about enum].

[source:javascript] // Create the class function TheClass() { // Initialize the display type to big this.displayType = TheClass.DISPLAY_TYPE.big; }

TheClass.DISPLAY_TYPE = { small : 0, medium : 1, big : 2 }

// Assign the small display type to the object var theObject = new TheClass(); theObject.displayType = TheClass.DISPLAY_TYPE.small; [/source]

This is what I call beautiful code.

One simple rule

Knowing that there's no mechanism that prevents you from modifying your “constants”, follow that simple law : don't modify your constants.