zoukankan      html  css  js  c++  java
  • 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
    })
    

      

     

  • 相关阅读:
    【存货管理】存货的计价方法
    【NHibernate】列“ReservedWord”不属于表 ReservedWords
    【MySQL】MySQL中where条件的执行分析
    brew卸载&重新安装
    mac nvm安装&使用&一些问题解决方案
    python初始环境配置
    股票数据api整理
    输入一个url到页面渲染完毕过程
    自己简单封装一个promise
    节流&防抖
  • 原文地址:https://www.cnblogs.com/fengzekun/p/3893912.html
Copyright © 2011-2022 走看看