Moving away from the javascript module pattern
A while ago I had written about using the javascript module pattern to organize code a little better. But off late, I have moved away from using the module pattern because of some reasons which i will outline below. But the pattern to use is really a matter of preference in my opinion. I have now gone back to basics and am using the javascript prototype pattern and have been loving it. Here is why i made the switch
- the ‘this’ keyword in my class method means what I really expect/want it to mean
- creating multiple instances of my class doesn’t consume more memory for creating more function instances since all instances use the functions on the prototype
- the ‘instanceof’ operator can be used to determine if any object is an instance of the class
Here is a simple example illustrating how to create a class. The snippet below creates a class called ‘MyClass’ with the ‘getOption’, ‘calculatePay’, ‘getDisplayPay’ methods.
function MyClass(options) {//constructorthis.options = options; }; MyClass.prototype.getOption = function(name) { return this.options[name]; }; MyClass.prototype.calculatePay = function(hours) { return hours * this.options['hourlyRate']; }; MyClass.prototype.getDisplayPay = function(hours) { return this.getOption('name') + " - " + this.calculatePay(hours); };
To create an instance of the class above
var inst = new MyClass({‘name’ : ‘Jeff’, ‘hourlyRate’ : 1000});
Also, the following works too
inst.constructor === MyClass; //returns true
if( inst instanceof MyClass ) //evaluates to true
Pretty simple and sweet. Here are a couple of examples of classes written like above
I am also using the standalone YUITest for unit testing javascript which doesn’t require the YUI framework which looks more attractive in YUI3. It was a very close call between YUITest and QUnit for the unit testing framework. I went with YUITest because it came with Selenium drivers
5 comments