仔细想了一下 决定先解决一下调用的问题, 这样无比要解决异步获取

!function(){var requireOption = window.requireOption || {path : '',};var windowIsLoad = false;var key = setInterval(function(){if( document.body || windowIsLoad ){windowIsLoad = true;clearInterval(key);this.onlad = null;key = null;requireFunctionRun();}},500)/*window.onload = function(){if( windowIsLoad ) return;windowIsLoad = true;requireFunctionRun();this.onload = null;clearInterval(key);}*///保存所有的已经加载完成的require方法 等待页面网页加载完成执行var requireFunction = [];var requireFunctionRun = function(){for(;requireFunction.length > 0;){requireFunction.shift()(); }}var defineName = '';var responseText = '';var require = function(name,callback){callback || (callback = function(){ return arguments.length == 1 ? arguments[0] : Array.prototype.slice.apply(arguments); });var path = requireOption.path,argu = [],key = false,length = name.length;name.forEach(function(e,i,ar){if(e.indexOf(".js") < 0){ar[i] += ".js";}})if( name.length > 0 ){for( var i = 0 ; i < name.length ; i++ ){if( typeof defineData.get(name[i]) === 'undefined' ){if( !defineData.time[name[i]] )defineData.time[name[i]] = {};defineData.time[name[i]].start = new Date();require.ajax({type: 'get',url : requireOption.path + name[i],success: function(name,e){try{defineName = name.toString();responseText = e.currentTarget.responseText; if( responseText ){if( responseText.indexOf("/*lwz-define-js*/") > -1|| responseText.indexOf('define') < 0 ){eval( "Lwz.define([],'文件不符合AMD格式,作为js独立运行中')");responseText = "/*" + defineName + "*/\n" + responseText;eval( responseText);}else{responseText = responseText.replace("define",'Lwz.define')responseText = "/*" + defineName + "*/\n" + responseText;eval( responseText );}responseText = null;}else eval( "Lwz.define([],null)");     }catch(e){console.log(name+"文件执行错误")console.log("错误原因:"+e.stack)responseText = null;}}.bind(this,name[i]),error: function(name,e){defineName = name.toString() //.split('/').pop()eval( "Lwz.define([],'加载失败')");console.log(name+"文件加载失败")debugger;console.log("失败原因:"+e.currentTarget.responseText);}.bind(this,name[i]),});defineData.setLoading(name[i]);}defineData.get(name[i],function(data,n){argu[name.indexOf(n)] = data;if( --length == 0 ){windowIsLoad ? callback.apply(window,argu) : requireFunction.push(callback.bind(window,argu))}})}} else{callback.apply(this,argu)} ;}var getXML = function(){if( XMLHttpRequest )return new XMLHttpRequest();elsereturn new ActiveXObject("Microsoft.XMLHTTP");}require.XMLHttp = getXML();require.option = requireOption;require.ajax = function(option = {}){var url = option.url;if( !url ) return;var mothed = option.type || "get";var data = "";for( var i in option.data )data += i + "=" + option.data[i] + "&";var success = option.success;var error = option.error;var complete = option.complete;var ajax = getXML();//判断是否是post请求if( mothed === "post" ){//如果是则添加头部文件ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");}else{url += "?" + data; data = undefined;}//建立请求连接ajax.open(mothed,url);//发送请求ajax.send(data);//请求回调ajax.onreadystatechange = function(e){if( this.readyState == 4 ){if( this.readyState == 4 && this.status == 200 )success.apply(this,arguments);else if( this.readyState == 4 && this.status.toString()[0] != "2" )error.apply(this,arguments);complete && complete.apply(this,arguments);}}}var define = function(){var argLen = arguments.length,name = arguments[0],depend = arguments[1],object1 = arguments[2],notArgu = [],argu = [];try{//判断是否给模块命名if( typeof name !== 'string' ){object1 = depend;depend = name;name = defineName;}//如果存在依赖模块的话if( typeof depend === 'object'&& typeof depend.length == 'number'&& depend.constructor === Array) {depend.forEach(function(e,i,ar){if(e.indexOf(".js") < 0){ar[i] += ".js";}})//先判断依赖模块是否已经被加载了for( var i = 0; i < depend.length ; i ++ ){if(typeof defineData.get(depend[i]) === 'undefined'|| defineData.get(depend[i]) === null){//如果存在没有被加载的模块notArgu.push(depend[i]);}else{argu[i] || ( argu[i] = defineData.get(depend[i]) );}}if( notArgu.length > 0 ){//进入加载模块//并在加载成功后重新运行函数require(notArgu,define.bind(this,name,depend||[],object1));return ;}}else {object1 = depend;depend = undefined;}}catch(e){console.error(name+"文件加载错误;")console.error(e);}//不存在未被加载的依赖模块if( typeof object1 === 'function' ){defineData.set(name,object1.apply(this,argu));             }else{defineData.set(name,object1);}}var defineData = {time : {},data : {},get : function( name , callback ){name.indexOf(".js") < 0 && ( name+='.js' );var data = this.data[name];if( !callback ) return data;if( data ){callback.call(this,data,name);return data;               }else{this.waitLoad[name] || (this.waitLoad[name] = []);this.waitLoad[name].push(callback);}},set : function( name , data ){this.data[name] = data;console.log(name+'注册成功。')this.time[name].end = new Date();this.time[name].time = this.time[name].start - this.time[name].end;var waitFunction = this.waitLoad[name];for( ;; ){if( waitFunction.length < 1 ) break;waitFunction.shift()(data,name);}},setLoading : function(name){this.data[name] = null;},waitLoad : {}};window.Lwz = {data : defineData,require : require,define : define};}()

  

先自定义一个异步获取的结构, 这样确定了以后我的工具箱加载的方式

采用传统的  require加载 define注册的方式  有利于第三方直接拿过去使用。。 考虑到以后可能会被直接才分使用

我不太会说话  所以我的博客一般都是直接上代码的, 注释什么的还是有的, 认真看的话 应该还是没什么问题的, 代码秉承着怎么简单怎么写的原则 ,可读性 应该还行吧------大佬别打我。

转载于:https://www.cnblogs.com/liao1992/articles/9337143.html

编写自己的工具箱 (一)相关推荐

  1. 让ArcMap变得更加强大,用python执行地理处理以及编写自定义脚本工具箱

    文章目录 一.用python执行地理处理工具 1.1 例:乘以0.0001 1.2 例:裁剪栅格 1.3 哪里查看调用某工具的代码? 二.用python批量执行地理处理工具 2.1 必需的python ...

  2. 自己的php工具,用PHP自己编写的站长工具箱

    前沿: 看到站长之家的站长工具很强大,所以也想自己试着实现一些其中的功能,由于本人只具有初阶的php技术,所以便用php一些函数实现了部分功能. 主要功能包括:正则表达式测试工具,MD5和SHA1加密 ...

  3. 灵敏度分析领域--多种编程语言工具箱总结

    UQLab-Matlab语言 优点: 1.2.0版本后,是完全开源的工具箱.(之前下载的版本是不能运行的,会提醒报错:许可证已过期) 在UQLab官网可以直接注册下载.(会出现注册的时候验证码不停刷新 ...

  4. C++实现类似反射模式(模板)

    C++实现类似反射模式(模板) 编程技巧 2010-11-23 21:08:02 阅读70 评论0   字号:大中小 订阅 最近在编写遥感算法工具箱的时候,工具都是在xml文件中配置好的,在工具箱上构 ...

  5. matlab 移动平均_两所高校被禁用MATLAB背后,是工业设计能力之争

    不管是MATLAB,还是EDA,都指向了中国核心工业软件缺失的问题.  作者| Decode  邮箱|oudibj@outlook.com 来源丨人民数字与品玩联合出品 一款工科软件,最近成为科研界议 ...

  6. Arduino PID自整定库

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  7. python修改ABAQUS的inp计算文件

    python修改ABAQUS的inp计算文件 这里的函数可以与上一个博客Matlab-python-ABAQUS数据交互及联合使用的函数接口相互配合和集成,实现matlab与Abaqus进行联合仿真计 ...

  8. C++实现类似反射模式

    在编写遥感算法工具箱的时候,工具都是在xml文件中配置好的,在工具箱上构建一棵树根据xml配置文件,然后通过双击不同的树节点,弹出不同的算法对话框.最简单的方式就是使用if else 或者switch ...

  9. matlab-python修改ABAQUS的inp计算文件

    python修改ABAQUS的inp计算文件 这里的函数可以与上一个博客Matlab-python-ABAQUS数据交互及联合使用的函数接口相互配合和集成,实现matlab与Abaqus进行联合仿真计 ...

最新文章

  1. mybatis学习笔记二(接口注解)
  2. word打出来的字体总是变宋体
  3. Ajax[Mount]
  4. job 做 ha 问题?
  5. 彻底解决Git中文乱码问题
  6. Py之imgaug:Python库之imgaug简介、安装、使用方法之详细攻略
  7. 为Flash Builder/Professional更新Flash Player
  8. 摩根大通:iPhone 13和新款iPhone SE将推动苹果业绩明年再破纪录
  9. Linux下PCI设备驱动程序开发[转]
  10. document.body.scrollTop值为0的解决方法[转]
  11. Mysql之统计数据
  12. java对外接口开发实例
  13. 荧光仪电源维修Spellman电源维修FF60P4X3313
  14. python numpy库数组的存取
  15. 绘制正态分布概率密度函数
  16. 强化学习笔记: Model-based Approaches(1)
  17. Python哲学之import this,诠释代码之美
  18. 手动实现promise基础功能代码并测试自己写的promise库是否符合规范
  19. 圣商,牢记使命成就当代圣商
  20. R语言学习笔记(1)——建立list

热门文章

  1. Linux 命令之 lsusb -- 显示本机的USB设备列表信息
  2. php model层怎么写逻辑,目前用php框架的话,大家会把逻辑写到model中吗?
  3. python使用elasticsearch_python中使用ElasticSearch(二)
  4. 基于RTP的QOS算法简介
  5. convert.todatetime指定日期格式_SQL基础知识V2——常用日期函数
  6. php7 获取数据流,stream_socket_accept()
  7. 电信级E1保护倒换设备产品介绍
  8. 信号延长器常见故障问题及解决方案汇总
  9. 485转换器产品类型介绍
  10. 光端机图像出现噪点或者数据有时不通的情况