文档章节

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

林落雨
 林落雨
发布于 2017/04/25 16:28
字数 247
阅读 2
收藏 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
JS三教九流系列-require.js-网站模块化开发

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

透笔度
2015/08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue学习资料

一直以为Vue是依赖nodejs的。 作为前端也可以耦合性就很低了。 //npm包管理器 进行管理npm install vue//初始化一个项目vue init//本地调试npm run dev//编译完成 ...

大灰狼wow
26分钟前
1
0
fullcalendar重新渲染

uiCalendarConfig.calendars.lesson_calendar.fullCalendar('removeEvents');var ym = uiCalendarConfig.calendars.lesson_calendar.fullCalendar('getView').title;$scope.get_lesson(y......

人来疯啊
30分钟前
1
0
多渠道打包总结

https://www.jianshu.com/p/2130db7584c8 https://blog.csdn.net/u011153817/article/details/50772496...

塔塔米
39分钟前
1
0
android -------- Data Binding的使用 ( 六) 自定义属性

今天来说说DataBinding在自定义属性的使用 默认的android命名空间下,我们会发现并不是所有的属性都能直接通过data binding进行设置,比如margin,padding,还有自定义View的各种属性。 默认...

切切歆语
45分钟前
1
0
收邮件 下载附件

uses IdMessage, IdMessageParts, IdAttachment, IdGlobalProtocols, ...;procedure SaveAttachmentsFromFile(FileName: String)var IdMessage: TIdMessage; MsgPart: Ti......

vga
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部