目前我正在研究我的私人项目(用于学习),这是一个简单的待办事项列表。我试图使用模块化模式(揭示模块模式,具体)。下图显示了我将如何构建它的一般想法。在JavaScript中结合设计模式是一种很好的做法
Image of how my app looks like
所以每个模块在一个单独的js文件,其中每个模块的样子:
var TaskModule = (function() {
function someFunction(parameter) {
tasks = newTasks;
}
}
而且还有一个问题:如果我们想创造一些像单独的文件,让说'助手功能'。这不是在每个模块是这样舒适的书写:
var someElement = document.getElementById('id')
我有我的助手功能(该功能只是一个例子):
var someElement = byId('id');
我当然可以像同样的方式创建HelpersModule别人但后来我会打电话给我的功能是这样的:
var someElement = HelpersModule.byId('id');
导致我的帮助功能没有意义了,这不是比原来的版本与document.getElem短entById。因此,为了避免写我每次打电话给我的助手功能时这个前缀“HelpersModule”,我设计HelpersModule这样的:
(function(window) {
window.byId = function (selector, scope) {
return (scope || document).getElementById(selector);
};
})(window);
现在一切工作正常,但我创建HelpersModule的方式是不与其他模块相一致。以不同的方式创建模块或完全没问题,这是不好的做法吗?在你的其他代码
const HelpersModule = {
byId: id => document.getElementById(id),
byTag: tag => Array.from(document.getElementsByTagName(tag))
};
...某处,指定你需要一个局部变量的辅助功能:
你的'HelpersModule.byID()'和'document.getElementById()'做同样的事吗? –
@ demogorgon.net是的,它的确如此,但这仅仅是一个例子 – pastuszkam
如果你的模块是用来完成不同的事情(一个对象初始化一个对象,另一个提供全局变量),那么它们看起来就不一样了。使用不同的方式是完全正确的。尽管如此,我建议避免尽可能多的全局变量。 – Bergi