Singleton Pattern in Javascript

Date
2007-08-23 (Thu)
Category
javascript

突然思いついたので、メモ。Google で検索した限り、こういう書き方をしている人はまだ誰もいないはず…どうかしらん。ちなみに meme は même のことで、フランス語で self / same の意味です。

var Singleton = function ()
{
 var err  = new Error('This is Singleton pattern. Please use
getInstance() instead');
 err.name = 'SingletonError';
 throw err;
}

Singleton.meme = Singleton;
Singleton.initialize = function() { var instance = { 'code': 'implementation comes here' }; this.meme.getInstance = function (){ return instance; }; delete this.meme.initialize; }
Singleton.getInstance = function () { this.meme.initialize(); return this.meme.getInstance(); }

try { s = new Singleton(); } catch (ex) { console.log(ex); }

try { s = Singleton.getInstance(); console.log(s); } catch (ex) { console.log(ex); }

ま〜、結局根が Dynamic で、アクセス制限も微妙な javascript なんで、Singleton パターンがどれほど重要か、という議論はあると思いますが。この考え方を使えば Singleton などを強制できるライブラリとか作れますね。

きっかけは、JavaScript Coding Guidelines for Mac OS X: Memory and Performance Considerations でした。

Release initialization functions. Code that’s called once and never used again can be deleted after its execution. For instance, deleting a window’s onload handler function releases any memory associated with the function, like this:
var foo = function()
{
    // code that makes this function work
    delete foo;
}
window.addEventListener('load', foo, false);

Web で使ってる限りでは、普通こういう事はしないよなぁ、と思いました。いやもうちょっと正確に言うと、Web で使ってる限り、数分単位以上 走り続ける Javascript なんてあんまり考えないよなぁ。Dashboard は、数日単位で走り続ける可能性があり、そのためにはこれくらいしないと行けないんですね。

これで思い出したのは、イントラネットで使うカレンダーの設計。全てを Javascript で実装しましたが、いちいち Event を delete しないと、オブジェクトへの参照が消えないので、数回の読み込みでメモリがパンクする、という事を発見したことがありました。

オチなしですが、最近 blog ご無沙汰だったので。

Comment:0

Comment Form

Remember Me?


Trackback:0

TrackBack URL for this entry
http://blogs.grf-design.com/mt/mt-tb.cgi/232
Listed below are links to weblogs that reference
Singleton Pattern in Javascript from The Croton

Return to Page Top