javascript - Why use an immediately invoked function to create a new object? -


in book i'm reading called testable javascript, following code pattern used (ignore specifics):

var obj = (function() {     return function() {         var docroot = '/somewhere';         this.validatedocroot = function(val) {             // validation logic - throw error if not ok         };         this.setdocroot = function(val) {             this.validatedocroot(val);             docroot = val;         };         this.getdocroot = function() {             return docroot;         };     }; }());  var myobject = new obj(); 

but why treat obj invoked function? is, what's difference between pattern , following code pattern:

var obj = function() {         var docroot = '/somewhere';         this.validatedocroot = function(val) {             // validation logic - throw error if not ok         };         this.setdocroot = function(val) {             this.validatedocroot(val);             docroot = val;         };         this.getdocroot = function() {             return docroot;         };     };  var myobject = new obj(); 

isn't case myobject same in both cases?

there no difference in example. invoked function used implement module pattern (http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript) helps encapsulate data not want in global scope.

you example can rewritten as

var myobject = (function() {     var docroot = '/somewhere';     return {         validatedocroot : function(val) {             // validation logic - throw error if not ok         },         setdocroot : function(val) {             this.validatedocroot(val);             docroot = val;         },         getdocroot : function() {             return docroot;         }     }; }()); 

in case using of invoked function matter. in first example adds syntax noise.


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -