沙箱模式解决了命名空间模式的如下几个缺点:

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

  

javascript沙箱模式的更多相关文章

  1. 初涉JavaScript模式 (12) : 沙箱模式

    引子 上一篇说了模块模式,而对于其中的命名空间模式其实也是有着一些问题,比如每添加一个模块或则深入叠加都会导致长命名,并且对于多个库的不同版本同时运行,一不小心就会污染全局标识,而这两天也发现了JSe ...

  2. 关于javascript的沙箱模式以及缓存方法

    在javascript函数代码中,经常会不经意出现全局变量,很可能造成对全局对象的污染,由于这种弊端的存在,那么沙箱模式油然而生.沙箱模式又称为沙盒模式.隔离模式.在js中只有函数可以限定变量作用域, ...

  3. javascript运行模式:并发模型 与Event Loop

    看了阮一峰老师的JavaScript 运行机制详解:再谈Event Loop和[朴灵评注]的文章,查阅网上相关资料,把自己对javascript运行模式和EVENT loop的理解整理下,不一定对,日 ...

  4. Javascript原型模式总结梳理

    在大多数面向对象语言中,对象总是由类中实例化而来,类和对象的关系就像模具跟模件一样.Javascript中没有类的概念,就算ES6中引入的class也不过是一种语法糖,本质上还是利用原型实现.在原型编 ...

  5. JavaScript严格模式详解

    转载自阮一峰的博客 Javascript 严格模式详解   作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...

  6. (转)深入理解JavaScript 模块模式

    深入理解JavaScript 模块模式 (原文)http://www.cnblogs.com/starweb/archive/2013/02/17/2914023.html 英文:http://www ...

  7. JavaScript严谨模式(Strict Mode)

    下面的内容翻译自It’s time to start using JavaScript strict mode,作者Nicholas C.Zakas参与了YUI框架的开发,并撰写了多本前端技术书籍,在 ...

  8. 深入理解JavaScript 模块模式

    http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html 模块模式是JavaScript一种常用的编码模式.这是一般的 ...

  9. Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)

    JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...

随机推荐

  1. MIT-6.828-JOS-lab3:User Environments

    Lab 3: User Environments实验报告 tags:mit-6.828 os 概述: 本文是lab3的实验报告,主要介绍JOS中的进程,异常处理,系统调用.内容上分为三部分: 用户环境 ...

  2. 扩展webservice

    描述: 最近一个winform项目刚开发完成.采用c/s架构.闲来把一些技术点整理下了. 做项目之前调研了客户的电脑 .客户端机子性能一般,而且都是基于xp. 这些客观存在的问题,注定了实现过程中必须 ...

  3. it喜爱的歌词

    1.曼丽 我们的过去我们的情义怎么能忘记  #曼丽你怎么这样忍心静静的就离去 #我很伤心从今以后不能够见到你 #只有留下你往日的情景使我常回忆 #一样的青山一样的绿水只有我和你 #曼丽可记得我们时常快 ...

  4. PAT甲题题解-1025. PAT Ranking (25)-排序

    排序,求整体的排名和局部的排名整体排序,for循环一遍同时存储整体目前的排名和所在局部的排名即可 #include <iostream> #include <cstdio> # ...

  5. PAT甲级题解-1057. Stack (30)-树状数组

    不懂树状数组的童鞋,正好可以通过这道题学习一下树状数组~~百度有很多教程的,我就不赘述了 题意:有三种操作,分别是1.Push key:将key压入stack2.Pop:将栈顶元素取出栈3.PeekM ...

  6. 互评Final版本——可以低头,但没必要——取件帮

    基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题; (1)N(Need,需求) 当今大部分在校学生由于各种原因懒于亲自去取快递,而总麻烦身边人也不是长久之计.而有些同学需 ...

  7. golang curl

    /** 1.可设置代理 2.可设置 cookie 3.自动保存并应用响应的 cookie 4.自动为重新向的请求添加 cookie */ package curl import ( "net ...

  8. 当数据库字段与model字段规则不一致时候 需要在xml里面手工转换

  9. 使用Ubuntu的Crontab定时任务需要注意的地方

    Ubuntu使用crontab定时任务  网上有很多教程,现在记录下我遇到的一些问题,需要注意的地方: 1.定时任务的日志存放路径 网上的说法:cron的日志存放在 /var/log/cron 里面 ...

  10. 【BZOJ4800】[Ceoi2015]Ice Hockey World Championship (meet in the middle)

    [BZOJ4800][Ceoi2015]Ice Hockey World Championship (meet in the middle) 题面 BZOJ 洛谷 题解 裸题吧,顺手写一下... #i ...