0

JavaScriptモジュールのパターンについて学びました。大好きです!

そのため、すべてのプロジェクトに含める 1 つのファイルにある汎用カスタム ライブラリを作成しました。次に、個々のプロジェクトごとにいくつかのプロジェクト固有のメソッドを追加し、それらを別のファイルに入れたいと思います。これらのメソッドに対してまったく新しいオブジェクトを作成する代わりに、既存の MODULE オブジェクトに追加したいと考えています。

どうすればいいですか?ありがとう

var MODULE = (function () {
    var my = {},
        privateVariable = 1;

    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}());
4

1 に答える 1

5

と言うだけで、プロパティまたは関数を追加できますModule.namedproperty = ...whatever...

ただし、これが別のファイルにある場合は、モジュール state のプライベート変数にアクセスできないことに注意してください。

これらの新しいメソッドに追加のプライベート ステートが必要な場合、またはどのファイルが最初に実行されるかを気にしたくない場合は、次のようにモジュールを設定できます。

var MODULE = (function (my) {
    var privateVariable = 1;

    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}(MODULE||{}));

モジュールがまだ作成されていない場合は新しいモジュールが作成され、作成されている場合は既存のモジュールに追加されます。

ただし、プライベート変数は、名前空間/モジュール全体ではなく、独自の特定のクロージャーに対して引き続きプライベートになります。

説明する更新

このモジュール形式は、クロージャー関数への入力を受け取ります。MODULE が既に定義されている場合は、MODULE オブジェクトを取り込みます。それ以外の場合は、新しい空のオブジェクトを作成します。 ||は論理 OR であるためMODULE||{}、「MODULE が定義されていて真 (MODULE のようなオブジェクト) である場合はそれを渡し、未定義または偽の場合は空のオブジェクトを渡します」と同じです。

余分な括弧は厳密には必要ありませんが、関数自体ではなく、関数の結果が渡されることを明確にするための規則です。

于 2013-04-02T23:51:04.413 に答える