Closure in javascript Part 2

Usage of closure in object factory functions

If you need to create the same object multiple times in your code, it is usually a good idea to put your object creation code in a function (which I like to call object factory functions). Lets make an object factory for number object we made in first part of this post.

var objectFactory1 = {
     getNewNumber:function(value){
          var number = 0;
          if (typeof value == "number")
               number = value;
          return {
               getNumber:function(){
                    return number;
                    },//getNumber
               setNumber:function(value){
                    if (typeof value == "number"){
                         number = value;
                    }else {
                         //TODO show an error or something
                    }
                    }//setNumber
               };//Returned Object
           }//getNewNumber
           };

Here we have an object that has a getNewNumber method which gets number value as a parameter and returns a number object instance. As you can see returned method is safe because value property is in closure of getNewNumber function.

This is a nice way of creating objects. However objects that created by this object factory have different prototypes. You need to make some changes in your code if you need to use prototype structure.

var objectFactory2 = function(){
     var baseNumber = {};//prototype
     return {
          getNewNumber:function(value){
               var number = value;
               var F = function(){
                    this.getNumber = function(){return number;};
                    this.setNumber = function(value){number = value;};
                    };
               F.prototype = baseNumber;
               return new F();
               }//getNewNumber
          };//return
     }();

In this version ve have a baseNumber object. This is an empty object and it will be our prototype. (any change on this object will effect all number objects). If you don’t need prototype structure, do not use new keyword for object creation. Json notation will always be faster and simpler.

Part 1Part 3

Leave a comment