js 模块defin化讲解
2014-01-09 09:48
190 查看
AMD规范的API非常简单:
JavaScript
规范定义了一个define函数,它用来定义一个模块。它包含三个参数,前两个参数都是可选的。第一个参数 id:模块名称,是一个string字符串,它表示模块的标识,(也就是模块的路径,通过id才能知道从什么位置去加载依赖的模块)
第二个参数 dependencies:是一个数组,成员是依赖模块的id,即依赖模块的名称。
第三个参数 factory:是一个回调函数,在依赖的模块加载成功后,会执行这个回调函数,它的参数是所有依赖模块的引用,如果回调函数有返回值,会导出出来
一个完整的模块定义包含模块名称,模块的依赖和回调函数,比如下面的代码:完整的模块定义JavaScript
如果这个模块并没有依赖,那么默认的依赖是["require", "exports", "module"],这时模块可以改写为:
JavaScript
如果省略第一个参数,则会定义一个匿名模块,见代码:JavaScript
在实际中,使用的更多的是匿名模块定义方式,因为这样更加的灵活,模块的标识和它的源代码不再相关,开发人员可以把这个模块放在任意的位置而不需要修改代码。一般只有在要使用工具打包模块到一个文件中时,才会声明第一个参数,所以应该尽量避免给模块命名。
在写模块的时候,也有可能没有依赖或者稍后才需要加载依赖,也就是说我们可以省略第一个和第二个参数,下面代码展示了这种用法,这也是CommonJS的写法,算是一种兼容:
JavaScript
注意上述回调函数里的require的使用将被自动进行动态加载。
JavaScript
1 | define(id?, dependencies?, factory); |
第二个参数 dependencies:是一个数组,成员是依赖模块的id,即依赖模块的名称。
第三个参数 factory:是一个回调函数,在依赖的模块加载成功后,会执行这个回调函数,它的参数是所有依赖模块的引用,如果回调函数有返回值,会导出出来
一个完整的模块定义包含模块名称,模块的依赖和回调函数,比如下面的代码:完整的模块定义JavaScript
1 2 3 4 5 6 7 | define("adder",["math"],function(math){ return{ addTen :function(x){ return math.add(x,10); } }; }); |
JavaScript
12345 | define("adder", function (require, exports) { exports.addTen = function (x) { return x + 10; };}); |
1 2 3 4 5 6 7 | define(["math"],function(math){ return{ addTen :function(x){ returnmath.add(x,10); } }; }); |
在写模块的时候,也有可能没有依赖或者稍后才需要加载依赖,也就是说我们可以省略第一个和第二个参数,下面代码展示了这种用法,这也是CommonJS的写法,算是一种兼容:
JavaScript
1 2 3 4 5 6 7 8 9 10 11 | define(function(require,exports,module){ …… vara=require('a'), b=require('b'); exports.action=function(){ …… }; }); |
相关文章推荐
- JS获取浏览器高度和宽度
- JS验证手机号码和邮箱地址
- JavaScript取随机整数的方法
- 用JS打开新窗口,防止被浏览器阻止的方法
- js中window.open()的所有参数详细解析
- webapi 返回数据类型控制(json,xml)
- JSON对象转字符串的一些方法
- JSONP的学习(收集整理)
- 初涉JavaScript模式 (5) : 原型模式 【一】
- javaScript typeof 和数据类型
- jsp乱码问解决及编码详解
- jsp页面中的代码执行加载顺序介绍
- litjson读取数据示例
- js中window.open()的所有参数详细解析
- JS获取节点的兄弟,父级,子级元素的方法
- js获取select标签选中值的两种方式
- js获取通过ajax返回的map型的JSONArray的方法
- js中生成map对象的方法
- javascript计算用户打开网页的停留时间
- javascript计算星座属相(十二生肖属相)示例代码