[Js代码风格]浅析模块模式
生活随笔
收集整理的這篇文章主要介紹了
[Js代码风格]浅析模块模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.實例解釋模塊模式
簡明扼要的說,經典的模塊模式指的定義一個立即執行的匿名函數。在函數中定義私有函數和私有變量并且返回一個包含公共變量和公共函數作為屬性和方法的匿名對象。
var classicModulePattern = function(){var privateVar = 1;function privateFunction(){alert('private');}return {publicVar:2,publicFunction:function(){classicModulePattern.anotherPublicFunction(); },anotherPublicFunction:function(){privateFunction();}} }(); classicModulePattern.publicFunction();這種形式也經常令人抱怨,因為每當需要在一個公共方法調用另一個公共方法或者獲取公共變量,就需要重復主對象的名字。另外一個比較苦惱的原因是你不得不把返回的公共函數或變量寫成對象字面量的形式。
為了解決重復寫主對象名字的問題,可以定義一個命名為“pub”的對象,在其上添加公共方法和公共屬性,然后return這個對象。
var namedObjectModulePattern = function(){var pub = {};var privateVar = 1;function privateFunction(){alert('private');};pub.publicVar = 2;pub.publicFunction = function(){pub.anotherPublicFunction(); };pub.anotherPublicFunction = function(){privateFunction();};return pub; }(); namedObjectModulePattern.publicFunction();但是,添加一個pub對象看起來有些冗余,可以采用另一種方法,在私有作用域中定義所有的函數和變量,然后在模塊末尾返回一個匿名對象,可以在其中指向某些私有變量和函數作為公共變量和函數。
var revealingModulePattern = function(){var privateVar = 1;function privateFunction(){alert('private');};var publicVar = 2;function publicFunction(){anotherPublicFunction(); };function anotherPublicFunction(){privateFunction();};// reveal all things private by assigning public pointersreturn {publicFunction:publicFunction,publicVar:publicVar,anotherPublicFunction:anotherPublicFunction} }(); revealingModulePattern.publicFunction();這樣保持了整個腳本連續性并且使哪些函數和變量是公共的看起來一目了然。另一個好處是你能用你想要的命名來展示這些私有函數,增強了可讀性。
var revealingModulePattern = function(){var privateVar = 1;function privateFunction(){alert('private');};var publicVar = 2;function publicFunction(){anotherPublicFunction(); };function anotherPublicFunction(){privateFunction();};// reveal all things private by assigning public pointersreturn {init:publicFunction,count:publicVar,increase:anotherPublicFunction} }(); revealingModulePattern.init();你甚至可以在匿名對象中調用函數返回一個值作為公共屬性。
var revealingModulePattern = function(){var privateVar = 1;function privateFunction(){alert('private');};var publicVar = 2;function publicFunction(){anotherPublicFunction(); };function anotherPublicFunction(){privateFunction();};function getCurrentState(){return 2;};// reveal all things private by assigning public pointersreturn {init:publicFunction,count:publicVar,increase:anotherPublicFunction,current:getCurrentState()} }(); alert(revealingModulePattern.current) // => 2 revealingModulePattern.init();2.參考資料
實例參考博客
stackoverflow命名空間
轉載于:https://www.cnblogs.com/lijie33402/p/4685327.html
總結
以上是生活随笔為你收集整理的[Js代码风格]浅析模块模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOSday05 UIScrollVi
- 下一篇: NMM3DViewer 设计