• 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
    })
    

      

     

  • 相关阅读:
    Eclipse背景颜色修改
    Android动画效果translate、scale、alpha、rotate详解
    代理上网的方法
    ubuntu系统使用SSH免密码登陆
    Git的思想和基本工作原理
    GitHub详细教程
    Ubuntu和Redhat(Debian)的差别
    T2: 一种能累积计算积分的EC2实例类型
    win server 2008 r2 iis+php 500错误内部服务器错误。
    从OTF字体文件里查找字体名称
  • 原文地址:https://www.cnblogs.com/fengzekun/p/3893912.html
Copyright © 2020-2023  润新知