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;