0

私はjavascriptライブラリを開発しており、オプションのメソッドのグループをJavascriptオブジェクトのさまざまなモジュールに保存したいと考えています。

ライブラリには2つのモジュールがあり、それらをModuleAとModuleBと呼びます。ModuleAはクラスオブジェクトをエクスポートし、それをClassAと呼びます。これは、最小限のコア機能しか備えていません。ModuleBは、ClassAのプロトタイプに設定されるオプションのメソッドのセットを定義します。

ライブラリにない3番目のモジュールであるModuleCでは、次のようにしたいと思います。

  • ModuleAのみをインポートしてClassAをインスタンス化すると、「InstanceA.MethodA(...)」を使用してInstanceA上のすべてのModuleAメソッドにアクセスできることがわかります。(他のメソッドもInstanceAで定義できます)

  • ModuleAとModuleBの両方をインポートし、ClassAをインスタンス化すると、「InstanceA.MethodA(...)」と「InstanceA.MethodB(...)」を使用して、InstanceAのすべてのModuleAメソッドとModuleBメソッドにアクセスできることがわかります。

私はいくつかの解決策を検討しましたが、これを達成するための好ましい方法があるかどうかはわかりません。これが私が考えたものです:

ModuleBはClassAを変更しますModuleBのファクトリはModuleAをインポートし、ClassAを変更します。これらの変更は持続することが保証されますか?AMDは、環境全体に同じモジュールをインポートすると、常に同じオブジェクトが返されることを保証しますか?

ModuleBは変更されたClassAを返しますModuleBはClassAを拡張し、新しいObjectを返します。これは、この例では2つのモジュールだけでうまく機能する可能性がありますが、複数のオプションのメソッドモジュールではどうでしょうか。

同様の状況が発生した場合は、その解決策を教えてください。

4

1 に答える 1

0

これが私のアプローチです:

// Module A - Define ClassA
define(function() {
    function ClassA() {}
    ClassA.prototype.methodA = function() {};
    return ClassA;
});

// Module B - Extend
define(function() {
    return function(ClassToExtend) {
         ClassToExtend.prototype.methodB = function() { };
    };
});

// Module C - Sticking
define(function(require) {

    // Define ClassA
    var ClassA = require("module_a");

    // Extend ClassA with custom methods of ModuleB
    require("module_b")(ClassA);

    // Instanciate extended ClassA
    var InstanceA = new ClassA();
}
于 2012-09-30T04:57:40.243 に答える