《编写可维护的Javascript》总结

最近读了这本书,为了防止狗熊掰棒子式的学习,写这篇总结把收获沉淀下来。

先说说看书的一点感受吧。不要说在大公司中多人团队合作了,就连原来在实验室的几个人小规模开发也都很需要编码规范,否则当复用组件的时候就要花费大量的时间调试,甚至不得不更改原来的代码。多人协作所需要制定的代码规范,常常就是大家达成协议要缩进几个格、如何命名等这些编程风格。虽然这个也很重要,统一风格有助于别人读懂和维护代码,而我认为更重要的是减少对他人代码的污染,同时减少重复的逻辑,能够实现代码的复用。再往上走,更高级和智能的应该就是借助一些成熟的模式和工具来实现代码的管理了。

避免代码污染,第一点需要注意的应该就是命名空间污染了。最早接触封闭的命名空间应该是上学期间做的一个基于jQuery的浮动提示控件。那会儿只会一点css和最简单的js处理,代码很简陋,逻辑上也是照猫画虎来的。现在再回头看原来的代码,就发现jQuery就是单全局变量方式(也不算特别单,包括$和jQuery两个),添加控件的时候,就可以在$.fn这个命名空间上添加新的函数。

这本书里提到的相关的解决方法:

1)      松耦合:通过类似Juicer的模板来实现Js与Html的分离;

2)     
全局变量:发生命名冲突。使用全局单一全局变量,在它上面缀上模块钩子来管理命名空间。这一点不仅体现在js的模块化处理,对于使用transition这种页面切换效果控件的情况下,需要使用包裹DOM来区分不同的元素也是很有必要的。踩了不少这个方面的坑啊~

3)      模块化:

定义模块:模块名称、依赖、工厂方法。

使用模块:YUI将所有模块都挂接到了全局变量Y上,在使用的时候通过Y找到需要调用的模块变量;而AMD会将依赖创建为对象,对应到参数传递给工厂函数。

在看全局变量这一块儿的时候,没见过世面的我发现一个彩蛋——创建书签。最简单的书签

<a href="javascript:void(document.bgColor=‘green‘);">书签</a>

拖到书签栏之后,点击书签即可执行href里边的代码,将页面的背景色变为绿色。在执行书签代码的时候,为了防止影响原有页面的js变量,需要将书签的代码设置为“零全局变量”,即用立即执行的函数调用,并将所有脚本放置其中。

在看到“不是你的对象不要动”这一行大大的黑体字的时候,心里忍不住紧张了一下。

最近做项目过程中,有一个功能点需要引入不少新旧控件来实现,这就涉及了很多别人的对象。当对于控件有新的需求时,最直接的想法就是修改控件的某个函数来实现目的。结果,由于其他页面也调用了该控件,就出现展现不一致的问题。踩了这个坑之后,我意识到直接修改控件存在着很大的风险,但是完全新增方法应该没有什么问题。但是,看了这本书之后,他总结的更为全面。包括:

不覆盖方法;

不删除方法;

不新增方法:原来我认为新增方法是没有什么问题的,但是书里提出一个风险——这个对象此刻没有该方法不代表他以后不会添加。如果以后控件升级了,就有可能会发生冲突。

书里提到的比直接修改方法更好的作法是通过继承实现。另外,在项目中学到的解决方法是通过注册回调函数事件来实现。

最后,记录下来一些总结的知识点。

1)      null与undefined:

原来的面试题必问啊,原来就知道null == undefined 且null !==
undefined;含义上null是空对象,undefined是没有任何值;

2)      函数:

严格模式:在函数中,而不是全局作用域使用use strict。使得编译器以更严格的方式进行解释,减少错误的发生。

比如不使用var声明变量,旧的解析方式会作为全局变量,strict的方式会报错。

立即执行函数:模块化作用域的基础。

3)      执行js代码:

eval:最常见,用于jsonp返回值的处理;

Function构造函数: new Function("console.log(‘hi‘)");

setTimeout和setInterval也可以执行字符串,但是这不符合它本身的语义。

严禁使用Function,必要时使用eval,setTimeout和setInterval的使用要符合语义。

4)      避免使用原始包装类型。

时间: 2024-08-25 13:43:12

《编写可维护的Javascript》总结的相关文章

《FLASH PROGRAMMING 那些事》总结

注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先program Lower page,然后program Upper Page. 对某个Cell来说,当写入1时,无需Programming,阈值电压保持不变,还是处于E状态:当写入0时,必须进行Programming,使它的阈值电压落到D范围 ,即E->D. Programming某个page时,往其所在

Error:Flash Download Failed-&quot;Cortex-M3&quot;

Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HWreset/sysresetReq/Vectreset)默认是AutoDetect,改成SysResetReq即可. 2.Jtag模式下,主要是芯片大小选错.Flash->Configure Falsh Tools配置窗口,切换到“Utilities"页,按“Setting"按钮进

&quot;Insufficient RAM for Flash Algorithms&quot;出错原因及解决方案

"Insufficient RAM for Flash Algorithms"错误一般会有一个"cannot load flash programming algorithm !"的提示窗口,如下图: "Insufficient RAM for Flash Algorithms"从字面上解释是:"装载FLASH算法的RAM空间不足". 这个错误一般出现在添加了新的FLASH烧写算法以后. 原因:FLASH的烧写算法本身也相当于

Flash program memory and data EEPROM

1.简介 STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的:所以我们可以通过这些通用寄存器来编程或擦除存储器的内容.设置写保护.或者配置特定的低功耗模式.我们也可以自己对器件的 option byte 进行编程.在这里我们只简单的讲解如何对STM8S内部的数据存储区域(data memory)进行写操作.读操作.擦除操作. 2.存储架构图 STM8S内部存储包括:FLASH程序存储器(FLASH program memory)和数据EEPROM(DATA EEPR

PIC32MZ tutorial -- 32-bit Timer

The microcontroller is PIC32MZ2048ECH144 on the PIC32MZ EC Starter Kit. This microcontroller has four 32-bit synchronous timers are available by combining Timer2 with Timer3, Timer4 with Timer5, Timer6 with Timer7, and Timer8 with Timer9. The 32-bit

PIC32MZ tutorial -- OC Interrupt

In my previous blog "PIC32MZ tutorial -- Output Compare", I shows how to apply Output Compare without interrupt to generate PWM signal. I also tried the Output Compare interrupt. I selected OC to be PWM mode without fault pin (OCM = "110&qu

PIC32MZ tutorial -- Output Compare

Output Compare is a powerful feature of embedded world. The PIC32 Output Compare module compares the values stored in the OCxR and/or the OCxRS registers to the value in the selected timer. When a match occurs, the Output Compare module generates an

关于自制 STM8 Bootloader

由于本人项目需要,要做STM8L052R8的bootloader,用于远程程序升级功能,为了安全考虑,不使用ST自带的bootloader,而是自制bootloader. 基本的功能是这样的,首先程序运行在一个V1.0的版本上,且带了BOOT,当程序收到一条命令后,程序跑入死循环,等待硬件看门狗复位:程序复位后进入bootload区,等待第二条命令的接收,接收到正确的数据帧后,bootloader开始擦除FLASH,并接收数据包,直到最后一个数据包接收完毕,通过指示灯以2HZ的频率闪烁,指示升级

STM32环境搭建/学习观点/自学方法 入门必看

文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的搭建 (个人认为,好用的工具,顺手的开发环境,对于编程是一种好的习惯,也是一种好的享受,所以,在环境搭建方面,我还是比较在意软件的互相联合使用,工程建立的规范化等等,这样可以尽量少的在后期更换不同的环境,变软会很浪费时间,一次到位,一路顺风顺水~) 个人偏好的环境搭建: 集成开发环境(IDE):Ke

[stm32参考手册] 1、Introduction

STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xxand STM32F107xx advanced ARM-based 32-bit MCUs 本资料覆盖范围: 这本资料提供完整的关于上述系列STM单片机的存储器和外设的使用方法.在整个文档中(除非特别说明)是把这几类单片机归于STM32F10XXX系列的. 注:STM32F10XXX是一个包含的各种不同存储器尺寸,不同封装和不同外设的微处理器家族. 其他相关资料引导: 关于订货编号.电气和物理性