现在化的模块机制
2017-06-30 10:11
232 查看
旧机制下的模块化编程采用的一般是独立作用域进行封装,如我们所熟悉的立即执行函数(IIFE)
(function(){
***
})()
又或者对象形式封装
var module = new Object({});
var module1 = {};
又或者宽放大模式 (本质上还是属于IIFE)
var module1 = (function (mod) {
mod.m1 = function () { console.log();}
return mod;
})(window.module1 || {});
现在化的模块机制
(function(){
***
})()
又或者对象形式封装
var module = new Object({});
var module1 = {};
又或者宽放大模式 (本质上还是属于IIFE)
var module1 = (function (mod) {
mod.m1 = function () { console.log();}
return mod;
})(window.module1 || {});
现在化的模块机制
var MyModules = (function Manager() { var modules = {}; function define(name, deps, impl) { for(var i = 0; i < deps.length; i++) { deps[i] = modules[deps[i]]; } modules[name] = impl.apply(impl, deps); } function get(name) { return modules[name]; } return { define: define, get: get }; })(); /********************************* 这段代码的核心是 modules[name] = impl.apply(impl, deps)。为了模块的定义引入了包装 函数(可以传入任何依赖),并且将返回值,也就是模块的 API,储存在一个根据名字来管 理的模块列表中。 下面展示了如何使用它来定义模块: *********************************/ MyModules.define("bar", [], function () { function hello(who) { return "Let me introduce: " + who; } return { hello: hello }; }); MyModules.define("foo", ["bar"], function (bar) { var hungry = "hippo"; function awesome() { console.log(bar.hello(hungry).toUpperCase()); } return { awesome: awesome }; }); var bar = MyModules.get("bar"); var foo = MyModules.get("foo"); console.log(bar.hello("hippo")); // Let me introduce: hippo foo.awesome(); // LET ME INTRODUCE: HIPPO /******************** "foo" 和 "bar" 模块都是通过一个返回公共 API 的函数来定义的。"foo" 甚至接受 "bar" 的 示例作为依赖参数,并能相应地使用它。 为我们自己着想,应该多花一点时间来研究这些示例代码并完全理解闭包的作用吧。最重 要的是要理解模块管理器没有任何特殊的“魔力”。它们符合前面列出的模块模式的两个 特点:为函数定义引入包装函数,并保证它的返回值和模块的 API 保持一致。 换句话说,模块就是模块,即使在它们外层加上一个友好的包装工具也不会发生任何变化 ********************/
相关文章推荐
- linux内核中udevd的模块自动加载机制
- 高通LCD与TP模块间交互之callback机制(内核通知链)
- Node.js的模块机制
- JavaScript异步模块加载机制(AMD)
- 模块机制
- Node.js的模块机制
- AngularJs中模块的依赖注入,ng-model、ng-bind和{{}}的区别,路由机制
- Node.js的模块载入方式与机制
- Python模块的动态加载机制
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响 -zt
- KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 《寒江独钓》内核学习笔记(5)
- 深入浅出Node.js(三):深入Node.js的模块机制
- 解析 Linux 内核可装载模块的版本检查机制
- 使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
- 从2.4到2.6:Linux内核可装载模块机制的改变对设备驱动的影响
- Python代码模块热更新机制实现(reload)
- Linux内核IP Queue机制的分析(三)——ip_ 4000 queue内核模块的分析(下)
- Python中模块的动态加载机制
- 解析 Linux 内核可装载模块的版本检查机制
- 深入浅出Node.js(三):深入Node.js的模块机制