javascript沙箱模式


沙箱模式解決了命名空間模式的如下幾個缺點:

1.對單個全局變量的依賴變成了應用程序的全局變量依賴。在命名空間模式中,是沒有辦法使同一個應用程序或庫的2個版本運行在同一個頁面中。
2.對這種以點分割的名字來說,需要輸入更長的字符,並且在運行時需要解析更長的時間,比如MYAPP.utilities.array


顧名思義,沙箱模式提供了一個可用於模塊運行的環境,且不會對其他模塊和個人沙箱造成任何影響。

Sanbox.modules = {};

Sanbox.modules.array = function(box){
  var array_string = '[object Array]',
  opt = Object.prototype.toString;
  box.isArray = function(a){
    return opt.call(a) === array_string;
  }
}
Sanbox.modules.object = function(box){
  var obj_string = '[object Object]',
  opt = Object.prototype.toString;
  box.isObject = function(a){
    return opt.call(a) === obj_string;
  }
}
function Sanbox(){
  var args = Array.prototype.slice.call(arguments),
  callback = args.pop(),
  //如果是字符串取arguments,否則取第一個參數數組
  modules = (args[0] && typeof args[0] === 'string') ? args : args[0],
  i;
  //強制使用new
  if( !(this instanceof Sanbox) ){
    return new Sanbox(modules,callback);
  }
  //如果沒有傳入參數,存儲所有模塊
  if( !modules || modules === '*'){
    modules = [];
    for( i in Sanbox.modules){
      if( Sanbox.modules.hasOwnProperty(i) ){
        modules.push(i);
      }
    }
  }

  for( i=0; i<modules.length; i++){
    //調用每個模塊方法
    Sanbox.modules[modules[i]](this);
  }
  //回調調用
  callback(this);

}
Sanbox(['array','object'],function(box){
  var arr = [1,2,3,4];
  var obj = { x : 1,y:2};
  console.log( box.isObject(obj) ); //輸出:true
  console.log( box.isArray(arr) ); //輸出:true
})

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM