We write about Ruby on Rails, React.js, React Native, remote work, open source, engineering and design.
Recently I was discussed with a friend how to create a singleton function in JavaScript. I am putting the same information here in case it might help someone understand JavaScript better.
Simplest solution is creating an instance of the object.
1var Logger = function (path) {
2 this.path = path;
3};
4
5l1 = new Logger("/home");
6console.log(l1);
7
8l2 = new Logger("/dev");
9console.log(l2);
10
11console.log(l1 === l2);
Above solution works. However l2
is a new instance of Logger
.
1window.global_logger = null;
2var Logger = function (path) {
3 if (global_logger) {
4 console.log("global logger already present");
5 } else {
6 this.path = path;
7 window.global_logger = this;
8 }
9 return window.global_logger;
10};
11
12l1 = new Logger("/home");
13console.log(l1);
14
15l2 = new Logger("/dev");
16console.log(l2);
17
18console.log(l1 === l2);
Above solution works. However this solution relies on creating a global variable. To the extent possible it is best to avoid polluting global namespace.
1var Logger = (function () {
2 var _instance;
3
4 return function (path) {
5 if (_instance) {
6 console.log("an instance is already present");
7 } else {
8 this.path = path;
9 _instance = this;
10 }
11
12 return _instance;
13 };
14})(); //note that it is self invoking function
15
16var l1 = new Logger("/root");
17console.log(l1);
18
19var l2 = new Logger("/dev");
20console.log(l2);
21
22console.log(l1 === l2);
This solution does not pollute global namespace.