メソッドgoog.addSingletonGetter()
を_ _ _引数を受け取るコンストラクタを持つクラス:getInstance()
Foo = function(x, y) {...};
指定する方法はありますgoog.addSingletonGetter(Foo, arg1, arg2)
か?を呼び出すとFoo.getInstance()
、インスタンス化された Foo オブジェクトが遅延して返されます。
メソッドgoog.addSingletonGetter()
を_ _ _引数を受け取るコンストラクタを持つクラス:getInstance()
Foo = function(x, y) {...};
指定する方法はありますgoog.addSingletonGetter(Foo, arg1, arg2)
か?を呼び出すとFoo.getInstance()
、インスタンス化された Foo オブジェクトが遅延して返されます。
クロージャ: The Definitive Guide on page 70 ではgoog.addSingletonGetter()
、次のように
ゼロ引数を取るコンストラクターを持つクラスの場合、呼び出されるたびにそのオブジェクトの同じインスタンスを返す
goog.addSingletonGetter()
静的メソッドを名前付きコンストラクター関数に追加します。getInstance()
通常、コンストラクター関数が存在する場合は、コンストラクター関数の代わりに使用する必要があります。
1 つのアプローチは、静的関数を追加して、143 ページのJavaScript パターンに示されている静的プロパティデザイン パターンのインスタンスに続くシングルトンを作成することです。getInstance()
/**
* @param {string=} opt_x
* @param {string=} opt_y
* @constructor
*/
Foo = function(opt_x, opt_y) {
if(Foo.instance_) {
return Foo.instance_;
}
/**
* @type {string}
* @private
*/
this.x_ = goog.isDefAndNotNull(opt_x) ? opt_x : 'default_X';
/**
* @type {string}
* @private
*/
this.y_ = goog.isDefAndNotNull(opt_y) ? opt_y : 'default_Y';
Foo.instance_ = this;
};
/**
* Get the singleton instance of Foo.
* @param {string=} opt_x
* @param {string=} opt_y
*/
Foo.getInstance = function(opt_x, opt_y) {
if (Foo.instance_) {
return Foo.instance_;
}
return new Foo(opt_x, opt_y);
};
このパターンを使用する利点は、誰かが次のように記述した場合に、誤って複数のインスタンスを構築することを防ぐことです。
var foo = new Foo();
...
// thousands of lines later
var snafoo = new Foo(); // Returns the singleton instance.