1

Fooの複数のインスタンスを作成できる JavaScript のオブジェクトのようなクラス ( と呼ばれる) を作成しようとしていますFoo。複数のインスタンスとは、各インスタンスが個別の内部状態を維持することを意味します。これが私がそれを達成している方法です。

var Foo = function() {
    function init(a) {
        this.a = a
    }

    function state() {
        return this.a
    }

    function getFoo() {
        return {
            init: init,
            state: state
        }
    }

    return {
        getFoo: getFoo
    }
}()

var a = Foo.getFoo()
var b = Foo.getFoo()
a.init(10)
b.init(20)
alert(a.state() + ', ' + b.state())

ご覧のとおりFoo.getFoo()、Java で通常使用される Factory パターンをシミュレートしているように見えます。内部状態は変数ですthis.a。2 つの異なる内部状態が表示されるためa.state()、この試みは成功したと考えています。b.state()ただし、これは純粋に私の試みであり、これらが業界でどのように実装されているかについては何も知りません。

さて、私の質問はコード レビューのリクエストのように見えるかもしれませんし、クローズされる危険性があるので、できるだけ客観的な質問をしようと思います。

  1. 内部状態としてnewクラスの新しいインスタンスを作成する代わりに演算子を使用できるように、同じコードをどのように実装できますか?this.a
  2. 業界で記述されたファクトリ パターンを使用したコードはどのようになっていますか?
4

1 に答える 1

3
var Foo = function (a) {
    this.a = a;
};
Foo.prototype.state = function () {
    return this.a;
};

var a = new Foo(10);
a.state(); // 10

次のように、コンストラクター自体から状態メソッドを宣言することもできます。

var Foo = function (a) {
    this.a = a;
    this.state = function () {
        return this.a;
    };
};

更新:ファクトリー パターン。

私は通常、工場でこれを使用します。

var Foo = function (a) {
    this.a = a;
};
Foo.prototype.state = function () {
    return this.a;
};

var FooFactory = function () {};
FooFactory.prototype.create = function (a) {
    return new Foo(a);
};

var factory = new FooFactory();
var a = factory.create(20);
a instanceOf Foo; // true
a.state(); // 20
于 2013-08-22T06:02:57.160 に答える