昔コーディングテストをつくったときにあった問題。

参考:http://bashalog.c-brains.jp/14/04/03-100000.php

function Singleton () {
  var instance = this; // 外からはアクセスできない
  if(typeof Singleton.instance === 'object') {
    return Singleton.instance;
  }

  this.myName = 'Singleton';

  // 一度呼ばれたらコンストラクタそのものを上書き
  Singleton = function() {
    return instance;
  };

  return this;
}

var obj1 = new Singleton(); // new を使ってSingletonオブジェクトを作成する
Singleton.instance = "hoge" // 新しいオブジェクトで上書きできない
var obj2 = new Singleton(); // new を使ってSingletonオブジェクトを作成する
console.log(obj1 === obj2); // true 2つは同じオブジェクト