Two scenarios for the js singleton pattern


Scenario 1: you can flexibly read internal variables by taking advantage of the two functions of closures, and you can keep them in memory.

//Plan a
    var SingletonTester = (function () {
        //Singleton method
        function Singleton(args) {
            var args = args || {};
            this.name = 'SingletonTester'; //The other way is to return an object
            this.pointX = args.pointX || 6;
            this.pointY = args.pointY || 10;
        }

        //The singleton instance
        var instance;

        //Returns the object
        return {
            name: 'SingletonTester',

            getInstance: function (args) {
                if (instance === undefined) {
                    instance = new Singleton(args);
                }
                return instance;
            }
        };
    })(); //Execute the method directly

    // test
    var test = SingletonTester.getInstance({ pointX: 5 });
    console.log(test.pointX);

Scheme 2:

//Scheme 2
  function Universe() {
      //Determine if an instance exists
      if (typeof Universe.instance === 'object') {
          return Universe.instance;
      }

      //Other content
      this.start_time = 0;
      this.bang = "Big";

      //  The cache
      Universe.instance = this;

      //Implicitly returns this
  }

  //  test
  var uni = new Universe();
  var uni2 = new Universe();
  console.log(uni === uni2); // true