天天看點

[JavaStript學習記錄] 子產品/封裝私有變量

子產品(用軟體工程的方法,管理網頁的業務邏輯)

"立刻執行函數"

為了不暴露私有成員,使用"立刻執行函數",将有關的屬性、方法封裝在一個函數的作用域中

var m = (function () {
 var count = 0;
 var f1 = function () {
   //...
 };
 var f2 = function () {
  //...
 };
 return {
  f1: f1,
  f2: f2
 };
})();


m.count  

>>undefined  //外部代碼無法讀取内部的count變量      

"放大模式"

情形:

  • 一個子產品很大,必須分成幾個部分
  • 或者一個子產品需要繼承另一個子產品
var moduleA = (function (mod){
 mod.f = function () {
  //...
 };
 return mod;
})(moduleA);


為子產品moduleA添加了一個新方法F(),然後傳回新的moduleA子產品      

在實際中,子產品中的各個方法加載的順序可能是不同的,若是第一個加載的是不存在的對象,則采用 

"寬放大模式"(立即執行函數的參數可以為空對象)

var module = (function(mod){
    //
    return mod
})({} || window.module);      

全局變量的輸入

為了在子產品内部調用全局變量,必須顯式地将其他變量輸入子產品

var module = (function ($, YAHOO) {
 //...
})(jQuery, YAHOO);      
//立即執行函數可以起到命名空間的作用

(function($, window, document) {

  function handleEvents() {
      //...
  }

  function initialize() {
      //...
  }

  function destruction() {
      //...
  }
  
  //對外隻暴露init和destroy接口
  window.finalAction = {
    init : initialize,
    destroy : destruction
  }

})( jQuery, window, document );      

繼續閱讀