这篇文章主要介绍了js沙箱模式,结合实例形式分析了js沙箱模式的原理与实现方法,需要的朋友可以参考下
本文实例讲述了js沙箱模式。分享给大家供大家参考,具体如下:
//sandbox(['module1,module2'],function(box){});
/*
*
*
* @function
* @constructor
* @param [] array 模块名数组
* @param callback function 回调函数
* 功能:新建一块可用于模块运行的环境(沙箱),自己的代码放在回调函数里,且不会对其他的个人沙箱造成影响
和js模块模式配合的天衣无缝
*
* */
function sandbox() {
//私有的变量
var args = array.prototype.slice.call(arguments),
callback = args.pop(),
//模块可以作为一个数组传递,或作为单独的参数传递
modules = (args && typeof args[0] == "string") ? args : args[0];
//确保该函数作为构造函数调用
if (!(this instanceof sandbox)) {
return new sandbox(modules,callback);
}
//不指定模块名和“*”都表示“使用所有模块”
if (!modules || modules[0] === "*") {
for(value in sandbox.modules){
modules.push(value);
}
}
//初始化所需要的模块(将想要的模块方法添加到box对象上)
for (var i = 0; i < modules.length; i++) {
sandbox.modules[modules[i]](this);
}
//自己的代码写在回调函数里,this就是拥有指定模块功能的box对象
callback(this);
}
sandbox.prototype={
name:"my application",
version:"1.0",
getname:function() {
return this.name;
}
};
/*
* 预定义的模块
*
* */
sandbox.modules={};
sandbox.modules.event=function(box){
//私有属性
var xx="xxx";
//公共方法
box.attachevent=function(){
console.log("modules:event------api:attachevent")
};
box.dettachevent=function(){
};
}
sandbox.modules.ajax=function(box) {
var xx = "xxx";
box.makerequest = function () {
};
box.getresponse = function () {
};
}
sandbox(['event','ajax'],function(box){
box.attachevent();
})
运行效果截图:
以上就是详解js沙箱模式的详细内容。