個人的には、カプセル化やプライベート コンテキストの作成などの明白なことの他に、Singleton JavaScript Design Pattern が好きです。
function Singleton() {
// cached instance
var instance = this;
//proceed as normal - adding some variables
this.variable1 = 1000;
this.variable2 = 3000000;
Singleton = function() {
return instance;
}
}
var singleton1 = new Singleton();
var singleton2 = new Singleton();
if(singleton1 === singleton2) {
console.log("Singleton works :)");
}
else {
console.log("Singleton doesn't work :/");
}
このコードを Chrome JavaScript コンソールに直接貼り付けることができます。
もちろん、ニーズに合わせて微調整することもできます。また、いくつかの欠点もあります。Singleton 関数を上書きでき、インスタンスにアクセスできなくなります。しかし、これは別の問題です。
Stoyan Stefanov (O'Reilly) による JavaScript Patterns book でずっと前に見つけました。他にも有用な設計パターンやクロージャーの適用例があるので、こちらをチェックしてください。この本によると:
You can use closure to store some private data, which is accessible by the returned function but not to the outside code.