文档章节

沙箱模式:原生JS实现模块依赖

林落雨
 林落雨
发布于 2017/04/25 16:28
字数 247
阅读 2
收藏 0
点赞 0
评论 0
    function Sandbox(){
        // 将arguments转化成array
        var args = Array.prototype.slice.call(arguments)
        // 取到最后一个参数:回调函数
        var callback = args.pop();
        // 依赖模块,模块可以作为一个数组传入,或者作为单独的参数传入
        var modules = (args[0] && typeof args[0] === "string") ? args : args[0];
        
        // 确保改函数作为构造函数被调用(是否使用new操作符,如果没有则再以构造函数的方式调用一次)
        if(!(this instanceof Sandbox)){
            return new Sandbox(modules,callback);
        }
        // 需要向this添加的属性
        this.a = 1;
        this.b = 2;

        // 向该核心this对象添加模块,不指定模块名称或指定*表示使用所有模块
        if(!modules || modules === "*"){
            modules = [];
            for(i in Sandbox.modules){
                if(Sandbox.modules.hasOwnProperty(i)){
                    modules.push(i);
                }
            }
        }

        // 初始化模块
        for(var i=0;i<modules.length;i++){
            Sandbox.modules[modules[i]](this);
        }

        // call the callback
        callback(this);

        // 需要的任何原型属性
        Sandbox.prototype = {
            name : "My Application",
            version : "1.0",
            getName : function(){
                return this.name;
            }
        }
    }

解释在注释里

 

调用示例

Sandbox(['ajax','event'],function(box){

})

 

模块定义示例

Sandbox.modules = {}

Sandbox.modules.dom = function(box){

}

 

© 著作权归作者所有

共有 人打赏支持
林落雨
粉丝 0
博文 13
码字总数 2308
作品 0
杭州
Deno原理详解,让我们一起从源码分析开始

Node之父ry:在“Node中的设计错误”演讲中表示: 不允许将任意本地函数绑定至 V8 当中。 所有系统调用都将通过消息传递完成(protobuf 序列化)。 两项原生函数:send 与 recv。 这既简化了...

lvgithub
06/05
0
0
【JSConf EU 2018】Ryan Dahl: Node.js 的设计错误

在稍早前的 JS Conf Berlin 上,被称为 Nodejs 之父的 Ryan Dahl 发表了《10 Things I Regret About Node.js》演讲,并且发布了新项目 Deno,值得一提的是,这是 Ry 的第二次公开演讲,而第一...

三环没有少
06/14
0
0
学渣的模块化之路——50行代码带你手写一个common.js规范

一、简述 一个js文件就是一个模块 会自动把写的代码块套一层闭包 浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量.(module,export,require,global) 既然没有,我们就手写一个...

言sir
06/25
0
0
0day漏洞组合拳:详细分析一款恶意PDF样本

  一、前言   2018年3月末,ESET研究人员发现了一款非常有趣的恶意PDF样本。经过仔细研究后,我们发现该样本利用了之前未知的两个漏洞:Adobe Reader中的一个远程命令执行漏洞以及Micro...

安全客
05/21
0
0
在浏览器中使用原生 JavaScript 模块 (译)

上周在四个不同的地方看到了推荐Using JavaScript modules on the web 这篇文章,之前一直没有去了解过原生模块在web浏览器中该如何使用,周末把这篇文章大致翻译了一下。 JS 模块 目前已得到...

a独家记忆
07/12
0
0
JS三教九流系列-require.js-网站模块化开发

js开发的模块化就是module处理 简单理解js模块化的开发就是让我们的web项目对js进行分类的处理 我们在开发网站的时候,里面会用要很多的类库,如jquery,还会有到基于jq各种插件,还会有其他...

透笔度
2015/08/19
0
0
深入浅出Node.js(三):深入Node.js的模块机制

Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都着墨不多。在后续介绍模块的使用之前,我认为有必要深入一下Node.js的模块机制。 CommonJS规范 早...

leeldy
2012/10/25
0
0
在 web 上使用 JavaScript 模块

在 web 上使用 JavaScript 模块 export const repeat = (string) => ;export function shout(string) {return ;} import {repeat, shout} from './lib.mjs';repeat('hello');// → 'hello h......

冉余
06/28
0
0
在浏览器中使用javascript module(译)

在浏览器中使用JS module 简介 现在,所有主流浏览器都已经支持JS module(Chrome、Edge、Safari、Firefox)~这篇文章将为你讲解如何在浏览器中使用JS module,如何负责的部署它们,以及chr...

LitCigar
06/21
0
0
WebAssembly 对比 JavaScript 及其使用场景

英文: Alexander Zlatkov 译文:Troland github.com/Troland/how-javascript-works/blob/master/webassembly.md 这是 JavaScript 工作原理的第六章。 现在,我们将会剖析 WebAssembly 的工作......

凤囚凰丶
06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
9分钟前
0
0
Confluence 6 安装一个语言组件

Confluence 捆绑了一系列的语言包。这些语言包在 'Language Configuration' 界面中的语言选项中。在 Confluence 的管理员控制台,你可以选择 Choosing a Default Language 和为用户设置(Edi...

honeymose
10分钟前
0
0
JVM学习笔记二:内存结构规范

1、JVM基本结构图 2、java堆(Heap) 3、方法区(Method Area) 4、程序计数器 5、JAVA栈图解 局部变量表:八大基本类型,还可以存储引用类型

刘祖鹏
15分钟前
0
0
mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
19分钟前
0
0
TensorFlow gpu 版 安装

win10 + Python3.6 下载cuda https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=81&target_type=exelocal 下载cudnn,复制链接地址,使用迅......

阿豪boy
37分钟前
0
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
38分钟前
0
0
防火墙未来的发展趋势在哪里?

导读 防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网。当下互联网时代,无论是大小企业,大部分都会部署有防火墙的设备,但这些防火墙往往并不...

问题终结者
40分钟前
0
0
MongoDB 副本集 成员节点 RECOVERING 状态处理

这两天遇到好几个MongoDB集群故障,其中一种就是节点长期处于 RECOVERING 状态,并且不能主动追上 primary 节点,需要手动干预。 首先 rs.status()查看实例状态,发现有的节点处于 RECOVERI...

xxj123gogo
46分钟前
0
0
建造者/构造者模式

在建造者模式中, 有如下4个角色: ● Product产品类 通常是实现了模板方法模式, 也就是有模板方法和基本方法, 这个参考第10章的模板方 法模式。 例子中的BenzModel和BMWModel就属于产品类...

kim_o
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部