c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

JavaScriptでsingletonを作る

viewをclassにしたりしてゐると、其れをsingletonにしとくと、debugに便利だったり。別になんら新しいことではないけど、此う云ふのは何度書いても目についてゐない人は居る。
JavaScriptでsingletonを作るのは、なんら珍しいことではない。

var object = {
  prop: 'property',
  method: function() {
  }
};

これでよい。newもconstructorも何も無い。おかしいところは何も無い。無理にclassにする前に検討すると好い。
勿論、関数としてconstructorを呼び出す形式 (class) もJavaScriptには有る。new演算子を使ふ形式だ。此の形式をsingletonにするのも簡単で、上記の応用である。

function C(a, b) {
  if (C.instance)
    return C.instance;
  C.instance = this;
  this.a = a;
  this.b = b;
}

C.instance = null;

new C(2, 3) === new C;

別threadから割り込まれる事は無いので、lockしなければ等の心配は要らない。[JavaScriptで、一度しか呼ばれない関数を作る http://c4se.hatenablog.com/entry/2013/06/26/192522 ]も同じ発想だ。別解も有る。

function C(a, b) {
  var instance = this;

  C = function() { return instance; };
  this.a = a;
  this.b = b;
}

new C(2, 3) === new C;

[prototype chainのpattern (JavaScript) http://c4se.hatenablog.com/entry/20110323/1300824873 ]と組み合わせると、此う成る。

function C(a, b) {
  var instance = this;

  if (!(this instanceof C))
    return new C(a, b);
  C = function() { return instance; };
  this.a = a;
  this.b = b;
}

C(2, 3) === new C;