I have the following function
var myInstance = (function() {
var privateVar = 'Test';
function privateMethod () {
// ...
}
return { // public interface
publicMethod1: function () {
// all private members are accesible here
alert(privateVar);
},
publicMethod2: function () {
}
};
})();
what’s the difference if I add a new to the function. From firebug, it seems two objects are the same. And as I understand, both should enforce the singleton pattern.
var myInstance = new (function() {
var privateVar = 'Test';
function privateMethod () {
// ...
}
return { // public interface
publicMethod1: function () {
// all private members are accesible here
alert(privateVar);
},
publicMethod2: function () {
}
};
})();
While the end result seems identical, how it got there and what it executed in is different.
The first version executes the anonymous function with
thisbeing in the context of thewindowobject. The second version executes the anonymous function, butthisis in the context of a new empty object.In the end, they both return another object(your Singleton). It’s just a slight difference in execution context.
To test this out, but an
alert(this);right before the declaration of theprivateVarvariable.@Tom Squires: That’s not necessarily true and is poor practice not to declare your variables. A script with the
"use strict";directive does cause the JS engine to complain (assuming that the engine supports"use strict";