Javascript模块化编程(大型JavaScript应用程序架构思考)
Javascript模块化编程
--大型JavaScript应用程序架构思考
https://www.360docs.net/doc/129113626.html,
2
密级:内部公开修改记录
版本
修改内容及原因修改人审核人修改时间V1.0新版发布付建龙2013/10/31
3
密级:内部公开目录
1. 大型JavaScript应用程序架构
2.Javascript模块化编程
3.RequireJS与BackBoneJS
4
密级:内部公开 什么叫“大型JavaScript应用程序”
大型JavaScript程序应该是非常重要并且融入了很多卓越开发人员努力,对重量级数据进行处理并且展示给浏览器的程序。
※参考:
https://https://www.360docs.net/doc/129113626.html,/addyosmani/large-scale-javascript-application-architecture
5
密级:内部公开?高效率的响应客户需求变化,提供满意度良好的软件产品
?成就感,士气高昂的团队
?
盈利
6
密级:内部公开
?开发成本的无限增加
?项目泥足深陷,团队士气低落
?失败
7
密级:内部公开?你架构里的东西,有多少可以立即拿出来重用??系统里有多少模块需要依赖其他模块?
?如果你程序的某一部分出错了,其他部分是否能够依然工作?
?你的各个模块能很简单的进行测试么?
?...
构建大型程序最大的秘密就是从来不构建大型程序,而是将程序分解成各个小的模块去做,让每个小模块都可独立运行和测试,然后把它们集成到程序里。
8
密级:内部公开目录
1. 大型JavaScript应用程序架构
2.Javascript模块化编程
3.RequireJS与BackBoneJS
9
密级:内部公开function m1(){ //...}function m2(){ //...}
原始写法
缺点很明显:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。
10
密级:内部公开var mySingleton = function () {
/* 这里声明私有变量和方法 */
var privateVariable = 'something private'; function showPrivate() { console.log(privateVariable); }
/* 公有变量和方法(可以访问私有变量和方法) */
return { publicMethod: function () { showPrivate(); }, publicVar: 'the public can see this!' };};
var single = mySingleton();single.publicMethod(); // 输出 'something private'console.log(single.publicVar); // 输出 'the public can see this!'
模块化编程的写法
11
密级:内部公开var module1 = (function(){
var _count = 0;
var m1 = function(){
//...
};
var m2 = function(){
//...
};
return {
m1 : m1,
m2 : m2
};
})();
https://www.360docs.net/doc/129113626.html,(module1._count); //undefined
立即执行函数的写法
12
密级:内部公开/*在一些大型项目里,将一个功能分离成多个文件是非常重要的,因为可以多人合作易于开发。再回头看看上面的全局参数导入例子,我们能否把blogModule 自身传进去呢?答案是肯定的,我们先将blogModule 传进去,添加一个函数属性,然后再返回就达到了我们所说的目的*/
var blogModule = (function (my) { my.AddPhoto = function () { //添加内部代码
}; return my;} (blogModule));
//模块化,可重用
//封装了变量和function ,和全局的namaspace 不接触,松耦合
//只暴露可用public 的方法,其它私有方法全部隐藏 Module模式
13
密级:内部公开 AMD规范
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
require(['math'], function (math) {
math.add(2, 3);
});
14
密级:内部公开目录
1. 大型JavaScript应用程序架构
2.Javascript模块化编程
3.RequireJS与BackBoneJS
15
密级:内部公开 RequireJS
RequireJs是一个脚本载入程序,允许你把你的 javascript 代码独立成文件和模块,同时管理每个模块间的依赖关系。//引入文件//RequireJS 使用一个简单的require 函数去导入脚本require(["jquery"], function($) { $(?#mydiv”).html(?Hello this is RequireJS talking”);});//使用AMD 模式,将我们的代码结构化成为模块define(function () { function add (x,y) { return x + y; }});
//RequireJS 包含了一个optimizer 优化器去收集所有文件的数据并把它放到一个压缩文件里面。
16
密级:内部公开
MVC设计模式之BackBoneJS
17
密级:内部公开 BackBoneJS的优点
View 的划分将页面上的视图元素解耦,粒度细化。View 间通过事件和 Model 通讯,避免了 DOM 事件的滥用。
分层的结构很清晰,使得前端工程在扩展性和维护性上都可以进行有效控制。
Collection/Model 抽象了以前杂乱的 AJAX 请求,CRUD 请求变得非常非常方便。
最适合的应用场景是单页面应用,并且页面上有大量数据模型,模型之间需要进行复杂的信息沟通
18
密级:内部公开 Backbone.Model
创建数据,进行数据验证,销毁或者保存到服务器上,数据发生 变动时触发相关动作
/**
要创建自己的 模型 类,你可以扩展 Backbone.Model 并提供实例 属性 , 以及可选的可以直接注册到构造函数的 类属性 (classProperties)。extend 可以正确的设置原型链,因此通过 extend 创建的子类 (subclasses) 也可以被深度扩展。*/
var Note = Backbone.Model.extend({ ... });
var PrivateNote = Note.extend({ ...
});
19
密级:内部公开 Backbone.Collection
Collection是Model的有序组合,提供了增加,删除,获取长度,排序,比较等一系列方法,并且能够非常方便地与服务器进行CRUD AJAX通讯
var Library = Backbone.Collection.extend({ model: Book });
20
密级:内部公开 Backbone.View
绑定HTML模板,绑定界面元素的事件,初始的渲染,模型值改变后的重新渲染和界面元素的销毁等
var DocumentRow = Backbone.View.extend({
tagName: "li", template : _.template(HtmlTemplate), events: { "click .icon": "open" },
render: function() { ... } });
javascript课程设计
潍坊科技学院 JavaScript课程设计 报告书 设计题目基于javascript的电子商务网站开发 专业班级11软件一 学生姓名江京翔 学号201101080002 指导教师陈凤萍 日期2012.12.24~2012.1.11 成绩
课程设计任务书 院系:软件学院专业:软件技术班级:11软1 学号:201101080002 一、课程设计时间 2012年12月24日至2013年1月11日,共计3周。 二、课程设计内容 使用html+javascript+css 完成以下任务: 1、能够熟练使用css结合html实现网页布局。 2、熟练使用文档对象模型和事件驱动,能够很好的实现web表单的交互式操作。 3、熟练使用javascrip中的对象,实现网页的动态效果。 三、课程设计要求 1. 课程设计质量: ?贯彻事件驱动的程序设计思想,熟练使用javascript中的对象,实现网页特效。 ?网页设计布局合理,色彩搭配合理,网页操作方便。 ?设计过程中充分考虑浏览器兼容等问题,并做适当处理。 ?代码应适当缩进,并给出必要的注释,以增强程序的可读性。 2. 课程设计说明书: 课程结束后,上交课程设计报告书和相关的网页。课程设计报告书的格式和内容参见提供的模板。 四、指导教师和学生签字 指导教师:学生签名:江京翔 五、教师评语:
基于javascript的电子商务网站开发 摘要 JavaScript是开发WEB应用程序不可或缺的一种语言,无论是为web页面增加交互性还是创建整个应用程序,如果没有Javascript,今天的web就不是现在这个样子了。JavaScript是具有正式规范的基于标准语言;然而,正如任何一个web开发人员所告诉你的那样,几乎每个web浏览器对这个规范的解释都不同。 本网站充分的结合了HTML与CSS的结合充分显示了网站的动态效果,是客户与网站能够充分的结合,进行信息的交换信息不断的进行更新。 基于新闻管理网站,国外新闻页面更具有代表性,是网站最标准型之一,通过Javascript 脚本的交互式该页面更好与其他的页面相互结合。 同时通常页面的下载是按照代码的排列顺序,而表格布局代码的排列代表从上向下,从左到右,无法改变。而通过CSS控制,您可以任意改变代码的排列顺序,比如将重要的右边内容先加载出来。 关键字:节假日、日历、Javascript脚本
13-14JAVASCRIPT程序设计大作业
西安欧亚学院2013-2014学年第一学期期末大作业 专业:软件技术 课程:JavaScript 程序设计 年级:12 一、作业题目: 题目:利用JavaScript 中特效编码,实现网页的动态效果。 从以下课程设计项目中选择一个作为自己的设计开发主题,如果自己有新的选题构想,要取得授课教师的批准方可进行设计,否则不计成绩。 网页主题参考(自己任选) 1、鼠标特效设计,如:跟随鼠标的小尾巴、鼠标跟踪动画、跟随鼠标的弹性文字等; 2、菜单特效设计,如:动画菜单、树形菜单、下拉菜单、右键菜单等; 3、图片特效设计,如:横向的相册效果,纵向的相册效果,滤镜图片轮播等; 4、背景特效设计,如:渐变背景、定时切换等; 5、时间特效设计,如:日期时间星期农历,动态时钟,时间倒计时等; 6、其它:如文字特效、密码验证特效等。 二、作业要求及评分标准: 1、作业要求 (1)涵盖知识点:贯彻事件驱动的程序设计思想,熟练使用JavaScript 中的对象,实现网页特效。 (2)网页要求 ? 主题突出,内容充实、健康向上,布局合理、结构清晰、规范; ? 色彩搭配合理、美观,设计新颖,有创意;页面布局尽可能平衡,色彩应用注意谐调,文本注意格式化 ? 技术运用全面,技术含量高;链接测试正确,跳转流畅; ? 代码应适当缩进,并给出必要的注释,以增强程序的可读性; ? 网页中涉及的所有“路径”必须使用“相对路径”; ? 设计过程中充分考虑浏览器兼容等问题,并做适当处理。 学号_____________ 班级___________ 姓名________ 座位号____ - - - - - - - - - - - - - - - - - - - - - - - - - -- - - -密 ○ - - - - - - - - - - - - - - - - - - - - - - - - 封 ○ - - - - - - - - - - - - - - - - - - - - - - - - 线 ○ - - - - - - - - - - -- - - - -- - - - -- - - -- - - --
原版Javascript程序设计实验指导书
《Javascript程序设计》实验指导书 一、课程性质和教学目的 JavaScrip是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。 学习Javascript必须理论联系实际,多做上机练习。只有在上机实验过程中才能真正学会程序设计。本实验报告主要包括学期内各个实验的实验目的、实验内容、实验记录、实验总结等,供学生学习记录,以提高学习效率。参加实验的学生应参照本报告手册的要求,认真实验,如实填写实验数据,并对实验结果进行分析,阐述实验中所遇到的问题,提出解决问题的方法。 二、实验目的 上机实验的目的不仅是为了验证教材和讲课的内容,或者验证自己所编写的程序正确与否。学习程序设计上机实验的目的是: 1.加深对讲授内容的理解,尤其是一些语法规定,课堂讲授既枯燥无味又难以记忆,但它们都很重要。能过多次上机就能自然地、熟练地掌握。通过上机掌握语法是行之有效的方法。 2.学会上机调试程序。即善于发现程序中的错误,并且能很快排除这些错误,使程序能正确运行。要真正掌握这门课程,不仅应当了解和熟悉有关理论和方法,还要求自己动手实现即会编程并上机调试通过。故应给予充分重视。调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能意会难以言传。调试程序的能力是每个程序设计人员应当掌握的一项基本功。 3.做实验时不要在程序通过后就认为搞定、完成任务了,而应当在己通过的程序甚而上作一些改动(例如修改一些参数、增加程序一些功能、改变输入数据的方法等),以观察和分析所出现的情况。 三、上机实验前的准备工作 实验前应做好准备工作,以充分利用有限的上机时间。准备工作至少包括: 1.复习和掌握本实验有关的教学内容。 2.准备好上机所需的程序。初学者切忌不编写程序或抄别人的程序去上机,应从一开始就养成严谨的科学作风。 3.对运行上可能出现的问题应事先作出估计;对程序中自己有疑问的地方,应作上记号,以便在上机时给予注意。 4.根据实验内容认真准备实验程序及调试时所需的输入数据。 5.在上实验课之前必须写好预习报告(编程题源程序用纸写好或画好程序流程图) 6.填空与改错题等题要预先做好,上机时的工作只能是输入源程序和调试修改。
程序设计基础 javascript作业
JavaScript上机作业 作业1: 使用循环语句,计算从1到100个数相加的结果并将其输出在Web页面上。
习题2: 让用户输入一个名字的列表,并将名字保存在数组中。在程序中循环地提示用户输入一个名字,直到用户输入为空。然后按升序顺序排列名字,并把名字输出在页面上,每个名字占一行。 实验内容二: JavaScript 对话框 4 、思考题: 设计密码检测程序,密码输入正确,显示“ 欢迎访问” ,不正确显示“ 密码不正确,好好想哟” 。实验内容三: JavaScript 函数的定义及调用 教师演示 JavaScript 函数的定义及调用的程序案例,学生按照教师的操作步骤,自己动手编写该程序,并完成教师布置的思考题。 1 、程序案例 1 -素数判断 实验内容四: JavaScript 分支结构程序设计 1 、分支结构程序案例 1 -两个数排序 2 、程序案例 2 -税额计算 3 、思考题: 设计JavaScript 程序,在网页上输出半径为 3 的圆的面积和周长。 实验容二:JavaScript 对话框 教师演示JavaScript 对话框的程序案例,学生按照教师的操作步骤,自己动手编写该程序,并完成教师布置的思考题。 1 、警示对话框程序案例 2 、确认对话框程序案例 3 、提示对话框程序案例 实验内容二:JavaScript 对话框 4 、思考题: 设计密码检测程序,密码输入正确,显示“ 欢迎访问” ,不正确显示“ 密码不正确,好好想哟” 。 实验内容三:JavaScript 函数的定义及调用 教师演示JavaScript 函数的定义及调用的程序案例,学生按照教师的操作步骤,自己动手编写该程序,并完成教师布置的思考题。 1 、程序案例 1 -素数判断
JavaScript程序设计试卷B
2013-2014学年第一学期期末考试 JavaScript程序设计试卷 班级姓名学号成绩 注意:请将答案填在最后一页的答题卡上,否则不予评分。 一、选择题:(本大题共25小题,每小题2分,共50分,在每小题给出的四个选项中,只有唯一正确选项)。 1、写“Hello World”的正确javascript语法是?() A、document.write("Hello World") B、"Hello World" C、response.write("Hello World") D、("Hello World") 2、JavaScript使用()来分隔两条语句。 A、分号 B、逗号 C、括号 D、句号 3、下列JavaScript的判断语句中()是正确的。 A、if(i==0) B、if(i=0) C、if i==0 then D、f i=0 then 4、下列JavaScript的循环语句中()是正确的。 A、if(i<10;i++) B、for(i=0;i<10) C、for i=1 to 10 D、for(i=0;i<=10;i++) 5、下列的哪一个表达式将返回假()。 A、!(3<1) B、(4>=4) C、(“c”!=”d”) D、(2<3)&&(3<2) 6、以下不属于鼠标事件的是()。 A、onclick B、onmouseover C、onload D、onmouseout 7、Math.abs(52)的结果是:()。 A、51 B、52 C、-52 D、50 8、以下JavaScript语句 var a1=10; var a2=20; alert(“a1+a2=”+a1+a2) 将显示()结果。 A、a1+a2=30 B、a1+a2=1020 C、a1+a2=a1+a2 D、a1+a2=+10+20 9、将字串s中的所有字母变为小写字母的方法是()。 A、s.toSmallCase() B、s.toLowerCase() C、s.toUpperCase() D、s.toUpperChars() 10、以下()表达式产生一个0~7之间(含0,7)的随机整数。 A、Math.floor(Math.random()*6) B、Math.floor(Math.random()*7) C、Math. floor(Math.random()*8) D、Math.ceil(Math.random()*8) 11、不能使用在标签“