長年プログラミングをしているわりに、
ちゃんとしたデザインパターンを整理していない自分に気付きました。
初回の記事は利用頻度の高いJavascriptのデザインパターンから共有したいと思います。
デザインパターンはコードを書く上で基本と申しますか設計上の基本・基礎。
参考文献、参考リンクは記事の末尾に記載しました。
newを使ってシングルトンを作る
Javascriptでシングルトンと言うと「モジュールパターン」として使われますが、それとは別な考察(newを使ってシングルトンを作る)が参考文献のほうにはありました。
このブログではそのうちの1例を自分で書いて実行・テストし確かめてみました。
function Singleton() { // キャッシュするインスタンスを格納する変数 var instance; // コンストラクタ書き換える関数を定義する Singleton = function Singleton() { return instance; } // プロトタイププロパティを引き継ぐ Singleton.prototype = this; // インスタンス instance = new Singleton(); // コンストラクタのポインタを再定義 instance.constructor = Singleton; // 機能のすべて instance.start_time = 0; instance.bang = "hoge"; return instance; } // 期待値のテスト Singleton.prototype.nothing = true; var singleton1 = new Singleton(); Singleton.prototype.everything = true; var singleton2 = new Singleton(); if (singleton1===singleton2) { // 同じものを指す console.log("同じインスタンス!"); } else { console.log("違うインスタンス!"); } // プロトタイププロパティは定義された時点ですぐに機能する console.log(singleton1.nothing); console.log(singleton1.everything); console.log(singleton2.nothing); console.log(singleton2.everything); // 通常のプロパティ console.log(singleton1.bang); // hoge // コンストラクタのポインタも正しいところをみる if (singleton1.constructor === Singleton) { console.log("ポインタOK"); } else { console.log("ポインタNG"); }
テスト
上記のコードをsingleton.jsというファイル名で保存しnode.jsで実行してみる。
$ node singleton.js
実行して以下が吐かれればOK
同じインスタンス!
true
true
true
true
hoge
ポインタOK
- 参考文献(o’REILLY):Javascriptパターン-優れたアプリケーションのための作法