js常用框架原理
(function(){ //存储已经创建的模块 var moduleMap = {}; //判断是否已经加载过 var fileMap = {}; //空函数 var noop = function(){}; /*注册为全局变量*/ window.thin = { //在这里定义的模块,都被注册到了moduleMap里面 /*define :主要作用moduleMap中注册模块 *name 模块的名称 *dependencies 模块的依赖项 *factory 模块的函数体 */ define:function(name,dependencies,factory){ if(!moduleMap[name]){ //模块的结构 var module = { name:name, dependencies:dependencies, factory:factory }; moduleMap[name] = module; } return moduleMap[name] }, /*use: 主要作用得到模块的使用权 *name 模块的名称 * */ use:function(name){ //module 需要使用的模块的引用 var module = moduleMap[name]; if(!module.entity){ //用来存储依赖项引用,用于传入factory,方便函数调用 var args = []; //遍历module的依赖项数组 for(var i=0;i<module.dependencies.length;i++){ //检测依赖项数组的entity属性,如果已经使用,获取引用 if(moduleMap[module.dependencies[i].entity]){ args.push(moduleMap[module.dependencies[i]].entity) } //如果没有使用,则获取这个模块的使用权 else{ args.push(this.use(module.dependencies[i])) } } module.entity = module.factory.apply(noop,args) //noop 空函数 } return module.entity; }, /*实现按需加载模块,而不是一次性加载所有模块 *实现原理:动态创建script标签,设置src,添加到document.head,监听完成的事件 *fileMap 记录已经加载的文件的路径,防止重复加载,当所有加载完,执行回调 */ require:function(pathArr,callback){ for(var i = 0;i<pathArr.length;i++){ var path = pathArr[i]; //如果还没有加载 if(!fileMap[path]){ var head = document.getElementByTagName("head")[0]; var node = document.createElement("script"); node.type= "text/javascript"; node.async="true"; node.src = path+".js"; //当加载完成后, node.onload = function(){ fileMap[path] = true; head.removeChild(node); checkAllFiles(); }; head.appendChild(node); } } function checkAllFiles(){ var allLoaded = true; //变量fileMap,如果有没有加载的,继续加载,加载完成以后,执行回调 for(var i=0;i<pathArr.length;i++){ if(!fileMap[pathArr[i]]){ allLoaded = false; break; } } if(allLoaded){ callback(); } } } } })();
js常用框架原理的更多相关文章
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- Js常用技巧
摘录:http://crasywind.blog.163.com/blog/static/7820316920091011643149/ js 常用技巧 1. on contextmenu=" ...
- JS常用的标准函数
原文:JS常用的标准函数 1.Array类型函数 array.concat(item...) 函数功能:关联数组,实现数组相加功能,但并不影响原先数组,concat返回新数组. array.join( ...
- JS 常用功能收集
JS 常用效果收集 1. 回到顶部>> 爱词霸
- JS常用校验方法(判断输入框是否为空,数字,电话,邮件,四舍五入等)
JS常用校验方法: 1.判断输入框是否为空,为空时弹出提示框 2.关闭窗口 3.检查输入字符串是否为数字 4.强制把大写转换成小写 5.手机号码校验,长度为11位数字. 6.电子邮件校验 7.电话号码 ...
- Node.js 常用工具
Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherit ...
- JS常用正则表达式备忘录
摘要: 玩转正则表达式. 原文:JS常用正则表达式备忘录 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 正则表达式或"regex"用于匹配字符串的各个部分 下面是 ...
- js常用数据类型(Number,String,undefined,boolean) 引用类型( function,object,null ),其他数据类型( 数组Array,时间Date,正则RegExp ),数组与对象的使用
js常用数据类型 数字类型 | 字符串类型 | 未定义类型 | 布尔类型 typeof()函数查看变量类型 数字类型 Number var a1 = 10; var a2 = 3.66; conso ...
- js常用身份校验规则
js常用身份校验规则 var Validator = { extractBirth: function(id) { // 身份证提取出生年月 var re = null, split, year, m ...
随机推荐
- wms、wmts、wfs等地图服务区别
OGC OGC 全称是开放地理空间信息联盟(Open Geospatial Consortium),是一个非盈利的国际标准组织,它制定了数据和服务的一系列标准,GIS厂商按照这个标准进行开发可 ...
- 西门子STEP7安装过程不断提示电脑重启的解决方法
win+R打开注册表 进入 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 删除PendingFileR ...
- Makefile学习(一)
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o ...
- HMS Core 机器学习服务6.4.0版本更新啦,文本翻译功能增加10种小语种语言类型!
近日,HMS Core机器学习服务(ML Kit)文本翻译功能在6.4.0版本更新中增加了10种小语种语言类型,分别是马其他语.马其顿.冰岛.乌尔都语.波斯尼亚语.乌克兰语.加泰罗尼亚语.斯洛文尼亚语 ...
- mysql覆盖索引与回表
mysql覆盖索引与回表 Harri2012关注 62019.07.28 11:14:15字数 1,292阅读 77,322 select id,name where name='shenjian' ...
- 怎样查看一个 linux 命令的概要与用法?假设你在/bin 目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?
使用命令 whatis 可以先出显示出这个命令的用法简要,比如,你可以使用 whatiszcat 去查看'zcat'的介绍以及使用简要. [root@localhost ~]# whatis zcat ...
- 一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以,但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致.
- 部署新项目自动对数据库进行migrate和让用户收到创建用户/超级用户信息
当项目中的models有数据表的时候,普通做法是用docke exec -it hello_web_1 bash,进入容器进行migrate,但是我们想要容器一启动就自动创建数据表,可以修改docke ...
- @RequestMapping 注解有什么用?
@RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的 控制器中的特定类/方法.此注释可应用于两个级别: 类级别:映射请求的 URL 方法级别:映射 URL 以及 H ...
- git和github学习笔记
1. 了解Git和Github 2. 使用Github 3. Git安装和使用 4. Git基本工作流程 5. Git初始化及仓库创建和操作 6. Git管理远程仓库 7. Github Pages ...