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
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