编写自己的工具箱 (一)

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

 

!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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ANTLR入门:构建一种简单的表达语言

这是该系列的第一篇文章。 本系列的目的是描述如何创建有用的语言和所有支持工具。 在本文中&#xff0c;我们将开始研究一种非常简单的表达语言。 我们将在语言沙箱中构建它&#xff0c;因此我们将其称为语言Sandy 。 我认为工具支持对于一种语言至关重要&#xff1a;因此&a…

Matlab回归分析regress和polyfit

在matlab中regress()函数和polyfit()函数都可以进行回归分析。 (1)regress()函数主要用于线性回归,一元以及多元的。它可以提供更多的信息,残差之类的。 (2)polyfit()函数是利用多项式拟合。可以是线性也可以是非线性的。 (1)regress()函数详解 [b,bint,r,…

ACM计算几何题目推荐

一。基础题目 1.1 有固定算法的题目 A&#xff0c; 最近点对问题 最近点对问题的算法基于扫描线算法。 ZOJ 2107 Quoit Design 典型最近点对问题 POJ 3714 Raid 变种最近点对问题 B&#xff0c;最小包围圆 最小包围圆的算法是一种增量算法&#xff0c;期望…

洛谷 P1027 Car的旅行路线

P1027 Car的旅行路线 题目描述 又到暑假了&#xff0c;住在城市 AA 的 CarCar 想和朋友一起去城市 BB 旅游。她知道每个城市都有 44 个飞机场&#xff0c;分别位于一个矩形的 44 个顶点上&#xff0c;同一个城市中 22 个机场之间有 11 条笔直的高速铁路&#xff0c;第 II 个城市…

Matlab各种拟合

线性拟合见上一篇《回归分析》 非线性拟合: cftool %curve fitting toolbox非线性函数拟合工具箱。要确定系数的初始值和上下限(sftool用于三维的) %该函数可以生成m文件函数,方便在编程中使用,但是生成的m文件函数拟合的结果会有很大的误差和图形界面的结果不一样 1 comman…

Matlab线性规划(Linear Programming)

bintprog&#xff1a;0-1规划linprog:线性规划quadprogoptimtool整数规划第三方工具箱&#xff1a;YALMIP http://users.isy.liu.se/johanl/yalmip/pmwiki.php?nMain.Download

java(IO)读写文件乱码转换UTF-8问题

java(IO)读写文件乱码转换UTF-8问题 读取文件String Content  ""; // 文件很长的话建议使用StringBuffertry {FileInputStream fsnew FileInputStream("文件录取");InputStreamReader isr  new InputStreamReader(fis, "UTF-8");Buff…

类固醇上的Java:5种超级有用的JIT优化技术

Java开发人员&#xff1f; 优化您的生产监控。 请在所有已记录的错误&#xff0c;警告和异常之后查看源代码&#xff0c;调用堆栈和变量状态- 尝试Takipi 。 最有用的JVM JIT优化有哪些&#xff1f;如何使用它们&#xff1f; 即使您没有积极计划&#xff0c;JVM也有很多技巧可…

poj3714 最近点对

最近点对&#xff0c;采用分治方法。过程&#xff1a; 1对原数组依据x左标从小到大排序。 2二分数组&#xff0c;左边求出最小值&#xff0c;右边求出最小值&#xff0c;我们求最小的。 3找出对于左右两边的可能小于当前最小值的最近点对&#xff0c;更新最小值。 这题目需要区…

Matlab 格式化字符串sscanf

sscanf 是按一定的格式从字符串中读取出字符,它有以下几种用法: A = sscanf(str, format) A = sscanf(str, format, sizeA) [A, count] = sscanf(...) [A, count, errmsg] = sscanf(...) [A, count, errmsg, nextindex] = sscanf(...) Description A = sscanf(str, forma…

2018牛客暑假多校二 D(贪心)

题目描述&#xff1a; 你要按照顺序以此经过n个商店&#xff0c;每到达一个商店你可以购买一件物品&#xff0c;也可以出售你手中的商品。 同一时刻你手上最多拿一件商品。在第i个商店购买和出售的代价都是a[i]。 问你经过完n个商店后的最大收益。 同时&#xff0c;在最大化收…

ZOJ1450 Minimal Circle 最小圆覆盖

包含点集所有点的最小圆的算法 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId450 平面上有n个点&#xff0c;给定n个点的坐标&#xff0c;试找一个半径最小的圆&#xff0c;将n 个点全部包围&#xff0c;点可以在圆上。 1. 在点集中任取3点A,B,C。 2. 作一个包…

遗传算法各Matlab工具箱简介

关于matlab遗传算法工具箱主要有三种&#xff1a;1、gaot工具箱&#xff1a;这是网上流传的免费的工具箱&#xff0c;网上对它介绍的资料也挺多&#xff0c;它不是Matlab软件自带的&#xff0c;但可以自己配置使用。飞思科技产品研发中心编著《Matlab 6.X辅助优化计算与设计》第…

独眼巨人反应组织了Java 8库的寒武纪爆发

什么是独眼巨人反应&#xff1f; Lambda表达式和默认方法在Java 8中的出现预示了Java语言十年来最大的结构性变化。 在此基础上构建了一些新的很酷的API&#xff0c;例如Stream, Optional, CompletableFuture最终Java开发人员可以以更实用的样式进行编码。 尽管这是非常受欢迎的…

C语言中文件定位函数总结

C语言中文件定位函数主要是&#xff1a;fseek, ftell, fsetpos, fgetpos。 先来讲前两个函数&#xff0c;这是最基本的定位函数&#xff1a; fseek函数&#xff1a;能把文件指针移动到文件任何位置&#xff0c;其原型是&#xff1a;int fseek(FILE *fp, long offset, int fromw…

API

api 百科名片 API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。目…

Matlab gatool使用方法

可以通过输入gatool或者optimtool(ga)打开图形界面或者用ga()运行命令行函数设置Fitnessfunction 和对应的Number of variables,为了提高效率最好向量化适应度函数,然后设置Vectorize参数为On可以选择相应参数进行设置Population种群参数Fitness scalling适应度比例参数Selecti…

系统模块 OS

os.system("系统命令") 调用系统命令 os.system("task kill /f /im 系统的进程") 关闭系统进程 os.listdir(地址) 扫描目录里面的文件。默认的是当前文件夹 返回一个列表 import os # os.listdir(地址) 扫描目录里面的文件。默认的是当前文件夹 print(os.…

Matlab非线性拟合工具箱cftool

一、 单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱 cftool &#xff0c;使用方便&#xff0c;能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是 yA*x*x B*x, 且A>0,B>0…

jsf标签p:ajax_JSF简单Ajax示例

jsf标签<p:ajax>今天&#xff0c;我们将看到一些使用JSF的Ajax简单样本。 如果要查看有关JSF / Web应用程序的其他文章&#xff0c;请单击以下链接&#xff1a; 重定向后的JSF持久化对象和消息 &#xff0c; 使用JAAS和JSF进行用户登录验证 &#xff0c; JSF&#xff1a;…