はシングルトンパターンに関する記事をたくさん読んで、そしていくつかのテストを行った後、私はこのようなシングルトンパターン(http://jsfiddle.net/bhsQC/1/)との間に差は認められなかっ:JavaScriptのシングルトンパターンと「この」
var TheObject = function() {
var instance;
function init() {
var that = this;
var foo = 1;
function consoleIt() {
console.log(that, foo);
}
return {
bar: function() {
consoleIt()
}
};
}
return {
getInstance: function() {
if (!instance) {
instance = init();
}
return instance;
}
};
}();
var myObject = TheObject.getInstance();
myObject.bar();
と、このようなコード(http://jsfiddle.net/9Qa9H/3/):
var myObject = function() {
var that = this;
var foo = 1;
function consoleIt() {
console.log(that, foo);
}
return {
bar: function() {
consoleIt();
}
};
}();
myObject.bar();
彼らの両方がオブジェクトのインスタンスを1つだけ作り、彼らの両方がそれらのいずれかでwindow
対象に「プライベート」のメンバー、that
ポイントを持つことができます。後者のほうが簡単です。私が間違っているなら、私を修正してください。このような標準的なコンストラクタ(http://jsfiddle.net/vnpR7/2/)使用
:
var TheObject = function() {
var that = this;
var foo = 1;
function consoleIt() {
console.log(that, foo);
}
return {
bar: function() {
consoleIt();
}
};
};
var myObject = new TheObject();
myObject.bar();
はthat
の正しい使用の利点を有するが、シングルトンではありません。
私の質問は:これらの3つのアプローチの全体的な長所と短所は何ですか?(問題がある場合は、Dojo 1.9を使用しているWebアプリケーションで作業しています。どちらの方法でも、このオブジェクトはDojoのrequire
の内部にあります)。
を単に好奇心から、なぜ誰かがJavaScriptでシングルトンパターンを使用するのでしょうか? var obj1 = {}申し訳ありませんofftopic –
@KirillIvlevでシングルトン/モジュールパターンを使用すると、IIFEの内部に専用の変数と関数を持たせることができます。 OPからのシングルトンも同様に遅延ロードを適用するように見えます - 最初に呼び出されたときにインスタンス化するだけです。 –
私はむしろ、自動起動関数を使ってコンストラクタを隠すために、次のようにします:http://jsfiddle.net/qFMcL/ – Niko