■ KAI.JAEGER : The singleton design pattern in JavaScript
■ Singleton パターン - Wikipedia
var Singleton = function () {
var instance = null;
var Constructor = function () { // コンストラクタ。プライベート関数
var that = {}; // ここにパブリックメソッドを収納
var id = Math.random(); // IDを乱数にする
that.getId = function () {
return id;
};
return that;
};
return new function () { // staticなメソッド
this.getInstance = function () {
if (instance === null) { // ヌルならコンストラクタを代入
instance = Constructor();
instance.constructor = null; // たぶんnewを禁止している?
}
return instance;
};
};
}(); // 最後の丸カッコをわすれずに!var i1 = Singleton.getInstance();
var i2 = Singleton.getInstance();
alert(i1.getId() + "\n" + i2.getId()); // おなじ乱数になる
黒字がいわゆる「The Good Parts」的な部分で、それを赤字の部分でラップすればシングルトンが実装できる。
後半の "return new function ()〜" と一番最後の丸カッコ "()" のコンビネーションでstaticなメソッドを実現している模様。"instance.constructor = null;" はnewを禁止しているのか? この行があってもなくても挙動が変わらないようなんだけど……よくわからない。
Rubyのようにincludeしただけでシングルトンを実装できるような仕組みをつくれればいいんだが、自分にはひらめけない。上記のサイトではシングルトン化する関数を試みているが、グローバル変数をつかっているからなぁ……。
でもこれだけでも充分スマートだし満足してるぅ。ヽ(´▽`)/〜♪
Douglas Crockford
オライリージャパン
売り上げランキング: 5275
オライリージャパン
売り上げランキング: 5275

0 件のコメント:
コメントを投稿