0

私は、明らかになったモジュールパターンで構造化されたモジュールを作成しました。これには、過負荷として機能するサブモジュールが含まれています。メインモジュールのいくつかの機能には、サブモジュールを介してのみ、ユーザーコードとともに使用すべきではないパラメータがあります。サブモジュールからparamsにアクセスするにはどうすればよいですか? "external usercode"では利用できません。 これに対して別のレイヤーを作っていいですか?JS公開モジュールパターン:ユーザコードで使用すべきでないパラメータ

var someNamespace = someNamespace || {}; 

someNamespace.someModule = (function() { 

    // _customSiteUrl, _customToken shouldn't be available via usercode 
    function create(listName, data, _customSiteUrl, _customToken) { 
     ... 
    } 
    var XS = (function() { 
     return { 
      createXS: function (siteUrl, listName, data) { 
       ... 
       create(listName, data, siteUrl, token); 
      } 
     } 
    })(); 

    return { 
     create: create, 
     XS: XS, 
     ... 
    } 
})(); 

someNamespace.someModule.create("hi", {}, "https://...", "someHash"); //Should not be possible!! 
someNamespace.someModule.create("hi", {}); //Should be used 

答えて

1

.someModuleに別の「レイヤー」を追加するだけで、ユーザーがアクセスできない変数をローカルで宣言し、戻り値の​​プロパティを基本関数ではなくこのレイヤーに変更することができます。

あなたは好きなだけ多くの「オーバーロード」を作成することができますが、それらはすべてあなたが戻ってくる「オーバーロード」で宣言したものと同じパラメータを保持します。そのオーバーロードの中で基本機能(create)に渡すものは、あなた次第であり、完全にプライベートです。

someNamespace.someModule = (function() { 

    // _customSiteUrl, _customToken shouldn't be available via usercode 
    function create(listName, data, _customSiteUrl, _customToken) { 
     ... 
    } 

    function userAccessibleCreate() { 
     return create(parameters, you, want); 
    }; 
    var XS = (function() { 
     return { 
      createXS: function (siteUrl, listName, data) { 
       ... 
       create(listName, data, siteUrl, token); 
      } 
     } 
    })(); 

    return { 
     create: userAccessibleCreate, 
     XS: XS, 
     ... 
    } 
})(); 

ここで、ユーザーはsomeNamespace.someModule.create("hi", {});しか実行できません。

1

は私が正しく理解してかどうかわからないんだけど、あなたは関数を作成し、公開対面からパラメータ_customSiteUrlなどを削除したい場合は、あなたのようなものを使用することができます。これは、ことを前提としてい

return { 
    create: function(listName, data) { 
     return create(listName, data, _customSiteUrl, _customToken); 
    }, 
    XS: XS, 
    ... 
}; 

_customSiteUrlおよび_customTokenは、サブモジュールの範囲で定義されています。基本的には、パブリックAPIでプライベートAPIを呼び出すだけです。

これにもカレーまたは部分的なアプリケーション機能を使用できますが、私はそれをあなたに任せます。

+0

さて、あなたは私が何を意味するのか理解できませんでした。クロウズの答えを見てください。 あなたの時間をありがとう。 – sandrooco

+0

これは本質的に同じものが異なってコード化されています。 Crowesは、 'userAccessibleCreate'関数にパブリックパラメータ(パラメータ、あなたが望むもの)を追加する必要があります。なぜなら、引数オブジェクトを使用せずに名前付きパラメータを受け付けないからです。 – Shilly

関連する問題