1

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript

我正在浏览上面的杰作。我仍然无法从上面的文章中得到两件事。

var myRevealingModule = (function () {

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

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

        function publicSetName( strName ) {
            privateVar = strName;
        }

        function publicGetName() {
            privateFunction();
        }


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

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

    })();

myRevealingModule.setName( "Paul Kinlan" );

相关问题: JavaScript 设计模式:模块模式和显示模块模式的区别?

我从上述问题中理解了很多部分。任何人都可以将上述revealing module pattern内容转换为传统的module pattern,以便我可以看到差异。

4

2 回答 2

0

避免显示模块模式时,您有两种选择。您可以使用对象文字或存根返回对象。

使用对象字面量:

var myRevealingModule = (function () {
   var privateVar = "Ben Cherry";

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

   return {
      setName: function( strName){
         privateVar = strName;
      },
      greeting: "Hey there!",
      getName: function() {
         privateFunction();
      }
   };

})();

使用存根:

var myRevealingModule = (function () {
   var privateVar = "Ben Cherry";
   function privateFunction() {
       console.log( "Name:" + privateVar );
   }

   var stub = {};
   stub.greeting = "Hey there!";
   stub.setName = function ( strName ) {
      privateVar = strName;
   };
   stub.getName = function () {
      privateFunction();
   }
   return stub;

})();

关键是不要在闭包中放入任何东西,除非你打算隐藏它。不要将某些东西放在关闭中,然后稍后“显示”它。

于 2014-05-14T17:30:24.880 回答
0

模块模式代码如下所示:您可以看到jsfiddle

var myModule = (function () {

    var privateVar = "Ben Cherry";

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

    return {
        setName: function( strName ) {
            privateVar = strName;
        },
        greeting: "Hey there!",
        getName: function() {
            privateFunction();
        }
    };

})();
myModule.setName( "Paul Kinlan" );
于 2014-05-14T09:07:22.163 回答