我在Addy Osmani的书中一直在阅读revealing module pattern
。它突出了以下缺点:
这种模式的缺点是如果私有函数引用 一个公共函数,如果一个补丁,公共函数不能被覆盖 有必要的。这是因为私人功能将继续 引用私有实现,该模式不适用于 公共成员,仅限于职能部门。
引用私有变量的公共对象成员也是 受上述无补丁规则的影响。
因此,使用Revealing Module模式创建模块 可能比使用原始模块创建的更脆弱 模式,所以在使用过程中应该小心。
我不是JS的专家,对我来说没有多大意义。另外,与模块模式 相比,本书未提供任何 这些劣势的例子。
我用Google搜索并在此处找到了这个:
Revealing module pattern disadvantages
我再也无法把握。正在使用的示例是使用构造函数。
请有人请ELI5。
答案 0 :(得分:0)
下面的代码可以理解这一点。
var myRevealingModule= (function(){
let privateVar = 'Kirti';
let publicVar ='Hye there';
function getName () {
console.log('name is ' + privateVar);
}
function privateGetNames(){
getName()
sayGreeting();
}
function sayGreeting() {
console.log(publicVar);
}
return {
getname: privateGetNames,
sayGreeting: sayGreeting
}
})();
//earlier result
myRevealingModule.getname();
//overriding a public method
myRevealingModule.sayGreeting = () => console.log('helloooo change');
myRevealingModule.getname();
在此 myRevealingModule 中有一个私有方法 privateGetName ,该方法可以访问 sayGreeting 一个公共方法,现在如果我想稍后覆盖sayGreeting(例如我上面的操作),privateGetName将继续访问其私有sayGreeting,而不是我们稍后声明的被覆盖的 sayGreeting 。
因此很难修补这些公共方法
有一篇非常不错的文章,可以帮助您进行详细说明。 https://developerslogblog.wordpress.com/2017/10/22/drawbacks-in-the-javascript-module-pattern/