JS 揭示模块模式:用户代码不应使用的参数
JS Revealing module pattern: Params that shouldn't be used by usercode
我有一个用揭示模块模式编写的模块。这包含一个作为重载工作的子模块。主模块的一些函数具有不应与用户代码一起使用的参数 - 只能通过子模块使用。我怎样才能从子模块访问参数但使它们对 "external usercode" 不可用?
我应该为此再做一层吗?
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
我不确定我是否理解正确,但是如果你想从面向public的创建函数中删除参数_customSiteUrl
等,你可以使用类似:
return {
create: function( listName, data ) {
return create( listName, data, _customSiteUrl, _customToken );
},
XS: XS,
...
};
这假设 _customSiteUrl
和 _customToken
是在子模块的范围内定义的。您基本上只需要 public API 使用额外参数调用私有 API。
您也可以为此使用 curry 或部分应用程序函数,但我会把它留给您。
您只需在您的 .someModule
中添加另一个 "layer" 并在本地声明任何 user-inaccessible 变量,然后更改您的 create:
属性 return到这一层,而不是基本功能。
您必须记住,您可以创建任意多个 "overloads",但它们都将保留您在 "overload" 中声明的相同参数,您 return荷兰国际集团您在重载中传递给基本函数 (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", {});
。
我有一个用揭示模块模式编写的模块。这包含一个作为重载工作的子模块。主模块的一些函数具有不应与用户代码一起使用的参数 - 只能通过子模块使用。我怎样才能从子模块访问参数但使它们对 "external usercode" 不可用? 我应该为此再做一层吗?
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
我不确定我是否理解正确,但是如果你想从面向public的创建函数中删除参数_customSiteUrl
等,你可以使用类似:
return {
create: function( listName, data ) {
return create( listName, data, _customSiteUrl, _customToken );
},
XS: XS,
...
};
这假设 _customSiteUrl
和 _customToken
是在子模块的范围内定义的。您基本上只需要 public API 使用额外参数调用私有 API。
您也可以为此使用 curry 或部分应用程序函数,但我会把它留给您。
您只需在您的 .someModule
中添加另一个 "layer" 并在本地声明任何 user-inaccessible 变量,然后更改您的 create:
属性 return到这一层,而不是基本功能。
您必须记住,您可以创建任意多个 "overloads",但它们都将保留您在 "overload" 中声明的相同参数,您 return荷兰国际集团您在重载中传递给基本函数 (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", {});
。