Modules/Wrappings 使得实现变为现实。虽然和NodeJS的模块写法不完全一致,但也有很多相似之处,使得熟悉NodeJS的程序员有一些亲切感。
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都网站设计、友谊网络推广、成都小程序开发、友谊网络营销、友谊企业策划、友谊品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供友谊建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
但NodeJS终究是服务器端的JavaScript,没有必要把这些条条框框放到浏览器JavaScript环境中。这时AMD 诞生了,它的全称为异步模块定义。从名称上看便知它是适合script tag的。也可以说AMD是专门为浏览器中JavaScript环境设计的规范。它吸取了CommonJS的一些优点,但又不照搬它的格式。开始AMD作为CommonJS的transport format 存在,因无法与CommonJS开发者达成一致而独立存在。它有独立的wiki 和讨论组 。
AMD设计出一个简洁的写模块API:define 。
define(id?, dependencies?, factory);
其中:
◆ id: 模块标识,可以省略。
◆ dependencies: 所依赖的模块,可以省略。
◆ factory: 模块的实现,或者一个JavaScript对象。
id遵循CommonJS Module Identifiers 。dependencies元素的顺序和factory参数一一对应。
以下是使用AMD模式开发的简单三层结构(基础库/UI层/应用层):
base.js
- define(function() {
- return {
- mix: function(source, target) {
- }
- };
- });
ui.js
- define(['base'], function(base) {
- return {
- show: function() {
- // todo with module base
- }
- }
- });
page.js
- define(['data', 'ui'], function(data, ui) {
- // init here
- });
data.js
- define({
- users: [],
- members: []
- });
以上同时演示了define的三种用法,
1,定义无依赖的模块(base.js)
2,定义有依赖的模块(ui.js,page.js)
3,定义数据对象模块(data.js)
细心的会发现,还有一种没有出现,即具名模块
- define('index', ['data','base'], function(data, base) {
- // todo
- });
具名模块多数时候是不推荐的,一般由打包工具合并多个模块到一个js文件中时使用。
前面提到dependencies元素的顺序和factory一一对应,其实不太严谨。AMD开始为摆脱CommonJS的束缚,开创性的提出了自己的模块风格。但后来又做了妥协,兼容了 CommonJS Modules/Wrappings 。即又可以这样写
- define(function(require, exports, module) {
- var base = require('base');
- exports.show = function() {
- // todo with module base
- }
- });
不考虑多了一层函数外,格式和NodeJS还比较象的。使用require获取依赖模块,使用exports导出API。
除了define外,AMD还保留一个关键字require。require 作为规范保留的全局标识符,可以实现为 module loader。也可以不实现。
目前,实现AMD的库有RequireJS 、curl 、Dojo 、bdLoad、JSLocalnet 、Nodules 等。
也有很多库支持AMD规范,即将自己作为一个模块存在,如MooTools 、jQuery 、qwery 、bonzo 甚至还有 firebug 。
原文:http://www.cnblogs.com/snandy/archive/2012/03/12/2390782.html
本文题目:AMD:浏览器中的模块规范
本文来源:http://www.36103.cn/qtweb/news23/5973.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联