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
Post a Comment