Generally there is only two ways to make a “class” in Javascript. The first is the prototypical way
function Foo(){
this.someProperty = "123";
}
Foo.prototype.bar = function(){
console.log("howdy", this.someProperty);
}
var blah = new Foo();
Foo.someProperty = "Hello World!");
Foo.bar();
>>"Howdy", "Hello World"
or something like
function Foo(){
this.someProperty = 123;
this.bar = function(){
console.log("Howdy", this.someProperty);
}
}
It’s sometimes not trivial to choose one over the other. The prototypical path is a tad faster instantiating while the second can be easier to write, read, and maintain. Generally I chose the prototypical when I know I’ll be instantiating the desired object a lot ( thousands to tens or thousands of times ) while the second is preferred when I’m writing a more complicated object definition.
You’d think it would be slam dunk to always choose the closure ( 2nd variety ) but it has one major flaw, by itself, you cannot inherit a closure based class.
Fortunately its 2011 and at this point someone is guaranteed to have already run into the same problem. From my personnel experience, the first group that solved this problem was PrototypeJS and their class system, then I ran into ExtJS and their system. Great and all but what if I don’t want everything else that comes with these two frameworks?
No problem:
There’s the super diet solution offered by John Resig’s proof of concept Simple inheritence thing
and a much more advanced system called BaseJS by Dean Edwards ( http://code.google.com/p/base2/ ).
If I know a projects going to be somewhat involved I would go with investing in Base2JS but if not, John Regig’s script is good enough.