文档章节

沙箱模式:原生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
APP7天快速开发教程4:APP开发图片缓存原理

第四天:掌握使用JS模版来实现列表数据,推荐使用doT模版;了解下拉刷新和上拉加载的实现原理及相关API的使用,实现下拉刷新、上拉加载更多功能;了解APICloud图片缓存原理及相关API的使用,...

达斯雷马
2017/02/23
225
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
如何安全地运行用户的 JavaScript 脚本

本文来自网易云社区,转载务必请注明出处。 有时候我们需要运行用户输入的 JavaScript 脚本(以下简称脚本)。对于我们来说,这些脚本是不可信任的,如果在当前的 Context 中运行这些脚本,它...

网易云
10/10
0
0
使用 Dojo 构建安全的混搭应用

术语混搭(mashup) 通常用于描述通过将两首或多首现有歌曲混合在一起来谱写一首新歌的技术。对于 web 应用程序,混搭 描述合并现有 UI 工件、流程、服务和数据来创建新 web 页面、应用程序等...

IBMdW
2011/06/03
315
0

没有更多内容

加载失败,请刷新页面

加载更多

window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
6分钟前
0
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
28分钟前
2
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
17
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
9
0
我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
今天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部