Javascript揭示模块模式的缺点

时间:2015-07-04 14:20:51

标签: javascript design-patterns

我在Addy Osmani的书中一直在阅读revealing module pattern。它突出了以下缺点:

  

这种模式的缺点是如果私有函数引用   一个公共函数,如果一个补丁,公共函数不能被覆盖   有必要的。这是因为私人功能将继续   引用私有实现,该模式不适用于   公共成员,仅限于职能部门。

     

引用私有变量的公共对象成员也是   受上述无补丁规则的影响。

     

因此,使用Revealing Module模式创建模块   可能比使用原始模块创建的更脆弱   模式,所以在使用过程中应该小心。

我不是JS的专家,对我来说没有多大意义。另外,与模块模式 相比,本书未提供任何 这些劣势的例子。

我用Google搜索并在此处找到了这个:

Revealing module pattern disadvantages

我再也无法把握。正在使用的示例是使用构造函数。

请有人请ELI5。

1 个答案:

答案 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/