2

この人気のある記事 で説明されているように、「JavaScript モジュール パターン」に従う「モジュール」がたくさんあります。私の理解では、これらのモジュールは、さまざまな動作をきちんとした名前空間に集約する方法です。

しかし、引数を受け入れる一意のオブジェクト インスタンスを作成できるようにしたい場合はどうすればよいでしょうか。現状では、すべてのデータが共有/静的であるため、それはできません。私はこれを行うことができるようにしたい:

var foo = new Some.Namespace.Whatever.Foo(config);

しばらく使っていたので、パターンの構造を変更することはできません。とてもうまく機能しています。非静的データで動作するいくつかの「クラス」をそれに投入できるように微調整したいだけです。

4

2 に答える 2

4

これを試してみませんか?

var MODULE = (function () {
  var my = {};

  my.SomeClass = SomeClass;
  function SomeClass(six) {
    this.six = six;
  }
  SomeClass.prototype.five = 5;

  return my;
})();

呼び出すvar obj = new MODULE.SomeClass(6)と、新しいオブジェクトが提供されます。はプロトタイプにアタッチされているため、obj.fiveのすべてのインスタンス間で共有されます。SomeClassただし、obj.sixは にアタッチされているため、そのインスタンスに固有objです。

または、クラスがモジュール内にある必要がない場合もあります。この場合、モジュールとクラスの両方に重複する機能があるため、必要に応じてクラスを使用してモジュールを置き換えることができます。

于 2013-03-06T16:27:05.730 に答える
3

これはおそらくモジュールパターンの乱用ですが、これはどういう意味ですか?:

var Some = (function() {
    var util = { /* ... */ };
    return {
        Namespace: (function() {
            return {
                Whatever: (function() {
                    var Foo = function(config) {
                        this.foo = config.foo || "foo";
                        this.bar = config.bar || "bar";
                    };
                    var Bar = function() {};
                    Foo.prototype.toString = function() {
                        return this.foo + " "  + this.bar;
                    };
                    return {
                        Foo: Foo,
                        Bar: Bar
                    }
                }())
            };
        }())
    };
}());

var foo = new Some.Namespace.Whatever.Foo({foo: "hello", bar: "world"});
foo.toString() // "hello world"
于 2013-03-06T16:35:19.977 に答える