显示(揭示)模块模式

The Revealing Module Pattern(显示模块模式)

现在我们已经对模块模式有了更进一步的了解,让我们再来看一个轻微的改进版 - Christian Heilmann的显示模块模式。

显示模块的出现是由于Heilmann对于一个事实非常沮丧,当他从另一个方法调用一个公有方法或者访问公有变量时,必须要重复主对象的名称。而且使用Module时必须要切换到对象字面量表示法来让某种方法变成公有方法。

他努力的结果就是更新了模式,我们可以在私有的作用域内简单的定义所有的方法和变量,并且返回一个匿名的对象指向我们希望公开的私有方法。

案例如下:


var myRevealingModule = (function () {

        var privateVar = "Ben Cherry",
            publicVar = "Hey there!";

        function privateFunction() {
            console.log( "Name:" + privateVar );
        }

        function publicSetName( strName ) {
            privateVar = strName;
        }

        function publicGetName() {
            privateFunction();
        }


        // 显示的公有对象指向私有的方法和属性

        return {
            setName: publicSetName,
            greeting: publicVar,
            getName: publicGetName
        };

    })();

myRevealingModule.setName( "Paul Kinlan" );

如果我们愿意的话,这种模式也可以用一个更具体的方案来显示私有函数和属性。


var myRevealingModule = (function () {

        var privateCounter = 0;

        function privateFunction() {
            privateCounter++;
        }

        function publicFunction() {
            publicIncrement();
        }

        function publicIncrement() {
            privateFunction();
        }

        function publicGetCount(){
          return privateCounter;
        }

        // Reveal public pointers to
        // private functions and properties

       return {
            start: publicFunction,
            increment: publicIncrement,
            count: publicGetCount
        };

    })();

myRevealingModule.start();

优点

这种模式可以让我们脚本的语法变得更加一致,它也让模块的结尾更加的清晰。我们的方法和变量可公开访问,从而简化可读性。

缺点

如果一个私有方法引用了一个公有的方法,如果补丁是必要的则公有方法是不可以被重写的。这是因为私有方法将继续引用私有的实现并且模式不应该应用于私有成员,只适用于私有函数。

引用私有变量的公有对象成员也服从上面的无补丁规则。

因此,用显示模块模式创建的模块,可能比用传统的模块模式创建的模块更脆弱,所以在使用过程中应多加小心。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,269评论 25 708
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,031评论 0 13
  • XML基本概念 XML举例: XML 语法(XML文档的三部分(声明、元素和属性))01 声明在XML文档的最前面...
    翻这个墙阅读 232评论 0 1
  • 两面针Zanthoxyli Radix,为芸香科植物两面针Zanthoxylum nitidum (Roxb.) ...
    我是笑笑smile阅读 1,357评论 0 0
  • 很久没来寿司台,这也是回温哥华以后第一次来吃。东西没变样,下午两点多也没多少人,但还是不时近来一些散客,所以这里是...
    小王加油啊阅读 250评论 0 0