书写可维护的javascript
内容介绍
编写可维护的代码很重要,因为大部分开发人员都花费大量时间维护他人代码。
1.什么是可维护的代码?
一般来说可维护的代码都有以下一些特征:
- 可理解性---------其他人可以接手代码并理解它的意图和一般途径,而无需原开发人员的完整解释
- 直观性---------代码中的东西一看就能理解明白,不管其操作过程多么复杂
- 可适应性 ---------代码以一种数据上的变化不要求完全重写的方法撰写
- 可扩展性----------在代码架构上已考虑到在未来允许对核心功能进行扩展
- 可调试性---------在有地方出错时,代码可以给予你足够的信息来尽可能直接地确定问题所在
2.怎么书写可维护的代码
书写出维护的代码最重要的就是要有一套严格的代码约定,为什么你去git上找来的项目,你能看得懂,而自己写的代码过几天就看不懂了(说的是我自己- -!)。
- 要让代码可维护,首先它必须可读。
1.可读性的大部分内容都是和代码缩进相关,当所有代码都用同一种缩进方式时,整个项目都会更加利于阅读。(这点现在编辑器下个插件就可以实现了)。
2.注释:这个非常重要。在大多数编程语言中,对每个方法的注释都视为一个可行的实践。因为javascript可以在代码的任何地方创建函数,所以这点常常被忘记。在每个函数和方法都应该包含一个注释,描述其目的和用于完成任务所可能使用的算法。因为存在浏览器差异,JavaScript代码一般会包含一些hack,不要假设其他人在看你代码的时候能够理解,请写上你的注释。
- 变量和函数命名是要合法并且要尽量符合其本意。
- 松散耦合
1.解耦HTML/Javascript
- <!-- 使用了<script>的紧密耦合的HTML/Javascript -->
- <script type='text/javascript'>
- document.write('hello word!')
- </script>
- <!-- 使用事件处理程序属性值的紧密耦合的HTML/Javascript -->
- <input type='button' onclick='dosomething()' />
虽然这些从技术上来说都是正确的,但是实践中,它们将表示数据的HTML和定义行为的Javascript紧密耦合在一起。理想情况下,html和javascript应该完全分离
2.解耦CSS/JavaScript
- // css对javascript的紧密耦合
- element.style.color ='red'
- // css对javascript的松散耦合
- .red{ color: red}
- element.className ='red'
通过修改css类,就可以让大部分样式信息严格保留在css中。javascript可以更改样式类,但并不会直接影响到元素的样式,这样做的话当出现问题时,可以追溯到css而非javascript.
3.解耦应用逻辑/事件处理程序
- function handleKeyPress(event){
- event = EventUtil.getEvent(event);
- if(event.keyCode == 13){
- var target = EventUtil.getTarget(event);
- var value = 5 * parseInt(target.value)
- if(value > 10){
- document.getElementById('error-msg').style.display='block'
- }
- }
- }
这个事件处理程序既包含了应用逻辑,还进行了事件的处理。这种方式的代码会让调试变的很难。
- function vaildataValue(value){
- value = 5 * parseInt(value);
- if(value > 10){
- document.getElementById('error-mag').style.display = 'block';
- }
- }
- function handleKeyPress(event){
- event = EventUtil.getEvent(event);
- if(event.keyCode == 13){
- var target = EventUtil.getTarget(event);
- vaildataValue(target.value);
- }
- }
将应用逻辑从事件处理程序中分离出来,就能更准确的定位问题,使代码更容易阅读。以下是应用和业务逻辑之间松散耦合的几条原则:
1.勿将event对象传给其他方法,只传来自event对象中所需的数据;
2.任何可以在应用层面的动作都应该可以在不执行任何事件处理程序的情况下进行
3.任何事件处理程序都应该处理事件,然后将处理转交给应用逻辑
书写可维护的javascript的更多相关文章
- 编写可维护的JavaScript代码(部分)
		平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ... 
- 《编写可维护的JavaScript》之编程实践
		最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ... 
- 编写可维护的Javascript读书笔记
		写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ... 
- 《编写可维护的javascript》读书笔记(中)——编程实践
		上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ... 
- 《编写可维护的javascript》读书笔记(上)
		最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ... 
- 编写可维护的JavaScript 收纳架
		如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ... 
- 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)
		本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ... 
- 编写可维护的JavaScript之编程风格
		在团队中只有每个人的编程风格一致,大家才能方便的互相看懂和维护对方的代码. 1. 层级缩进 对于层级缩进目前有两种主张:1)使用制表符这种方法有两种好处,第一,制表符和缩进层级之间是一一对应关系,符合 ... 
- 《编写可维护的JavaScript》 笔记
		<编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ... 
随机推荐
- 用ReentrantLock和Condition实现线程间通信
			在Java多线程中,除了使用synchronize关键字来实现线程之间的同步互斥,还可以使用JDK1.5中新增的RetrantLock类来实现同样的效果.RetrantLock类的扩展功能也更加强大, ... 
- QTP基本方法2------截取字符串
			1.instr: 返回字符串在另外一个字符串中第一次出现的位置 结构:instr([start],string1,string2[,compare]) start:开始位置,可选参数,默认为1 str ... 
- ArcSDE 数据迁移 Exception from HRESULT: 0x80041538问题及解决方案
			一.问题描述 1.采用gdb模板文件,在ArcSDE(数据服务器)中批量创建数据库表(数据迁移)时,用到接口ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer的方法T ... 
- ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)
			什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ... 
- emmet完整收录(html,css)
			emmet官网 https://emmet.io/ 语法篇 Child: > nav>ul>li <nav> <ul> <li></li&g ... 
- alibaba之Nacos
			本文为转载文章 原文链接:https://windmt.com/2018/11/09/intro-to-spring-cloud-alibaba-nacos/ 上个月最后一天的凌晨,Spring Cl ... 
- iOS:文字相关(19-01-08更)
			0.写在前面 1.小技巧 UILabel类: 1-1-1).设置行间距富文本,有省略号要求的,需要再次设置省略(初始化时设置的会失效). UITextField类: 1-2-1).清空按钮. UITe ... 
- App跳转系统设置界面
			NSString * urlString = @"App-Prefs:root=WIFI"; if ([[UIApplication sharedApplication] canO ... 
- mybatis的Mapper.xml文件SQL语句BadSqlGrammarException之FUNCTION错误系列
			想必各位在开发过程中一定使用过:统计的功能,用到了很多SQL的函数,于是就直接写在Mapper文件中了: 比如: member_num,MAX(ID) AS newestLoanID,MIN (ID) ... 
- code#5 P3 我有矩阵,你有吗?
			我有矩阵,你有吗? 时间限制: 1.0 秒 空间限制: 128 MB 相关文件: 题目目录 题目描述 企鹅豆豆手里有两个 01 矩阵 A 和 B.他可以进行两种操作: 选择 A 矩阵的一行,然后把 ... 
