最近,在读《JavaScript DOM编程艺术(第二版)》这本书,想着将自己的读后感记录下来,作为记忆吧。

  其实我并不是最近才刚开始读这本书的,我读了有一段时间了。我是一名web前端开发人员,喜欢前端,但是我不喜欢只知其然而不知其所以然的这个感觉,它让我感觉到恐惧。所以我决定充实一下自己的大脑。现在的人一说学习,都跑去网上看视频,跟着视频敲代码,说实话,这是一种快速入门的方法,能让我们快速的掌握这些开发技巧。但是也只有这点作用了,这就像工厂里面的工作一样,假如你是让别人告诉你第一步做什么,第二步做什么,第三步做什么而不去想为什么这么做,那么你也只能是最底层的一名工作人员而已,机械的重复这个工作,这也就是人们常说的码农。

  我是个较真的人,我每次碰到问题的时候,我的第一个想法就是为什么。为什么会出现这个问题,它是由什么原因产生的,该怎么解决呢?我特别讨厌那种说法,别管其他的,能解决就行了。我认为这是一种不负责任的说法,但是公司就需要这种做法,公司追求的是效率,我也只能随遇而安了,但是在下面我还是会找原因然后才是解决这个问题。随着对前端的深入了解,越来越发现自己的基础知识的不足,所以又重新拿起了书本,开始了枯燥的学习生活。

  读了这本书,我对平稳退化的印象比较深。联系了之前的那些做法,仔细想想确实是这个样子的。

  什么是平稳退化呢?其实也没有一个准确的定义,我来说说我的理解吧。通俗一点就是让自己的网页可以在所有浏览器上正常显示。其实这个听起来很容易,但是做起来却一点也不容易。

  首先,大家注意了没有我们写前端页面的时候css要放在head里面,然后是body里面的文档结构,最后才是js代码。但是在实际的工作当中我发现好多同事都不是这么做的,他们写的都比较随意,例如:js和css都写在head里面,这是他们的一种习惯。但是,假如你的js里面有问题,就会影响页面的正常加载。有些地方甚至会出现乱码,影响网页的用户体验。这就很严重了,但是有人肯定又要说我写的代码都测试过了,js是不会报错的。这个可不敢打包票,因为浏览器的兼容性在那放着呢。举个简单的例子document.getElementsByClassName(),这是一个很简单的DOM方法,大家用的也都很普遍,但是IE8不支持这个方法。当然我举的是个很简单的例子,也容易解决,我想表达的就是在不同的浏览器的版本中这种情况特别容易出现。书上提供了一种方法:

function displayAbbreviations() {

	if (!document.getElementsByTagName) return false;
if (!document.createElement) return false;
if (!document.createTextNode) return false;
//取得缩略词
var abbreviations = document.getElementsByTagName("abbr");
//判断是否存在这个元素,没有的话退出来
if (abbreviations.length < 1) return false;
var defs = new Array();
//遍历缩略词
for (var i = 0; i < abbreviations.length; i++) {
var current_abbr = abbreviations[i];
if (current_abbr.length < 1) return false;
var definition = current_abbr.getAttribute("title");
var key = abbreviations[i].lastChild.nodeValue;
defs[key] = definition;
}
//创建自定义列表
var dlist = document.createElement("dt");
for (key in defs) {
var definition = defs[key];
//创建定义标题
var dtitle = document.createElement("dl");
var dtitle_text = document.createTextNode(key);
dtitle.appendChild(dtitle_text);
var ddesc = document.createElement("dd");
var ddesc_text = document.createTextNode(definition);
ddesc.appendChild(ddesc_text);
//把他们添加到定义列表
dlist.appendChild(dtitle);
dlist.appendChild(ddesc);
}
//创建标题
var header = document.createElement("h2");
var header_text = document.createTextNode("Abbreviations");
header.appendChild(header_text);
//将标题添加到页面主体
document.body.appendChild(header);
//把定义列表添加到页面主体
document.body.appendChild(dlist);
}

大家可以看下我上面的代码,很容易就可以发现一个问题,就是我的这个方法的最前面有几个判断,这几个判断就是为了预防这一种情况出现的,虽然代码量增加了,但是更加保险了,最多就是页面中的某个功能会缺失,但是整体页面都能正常显示,js都能正常加载。这种做法使得代码量增加的,但是好处是显而易见的。我认为写代码也是一种习惯,我们应该从现在就开始养成一个良好的编码习惯,这会让我们离成功更进一步的。

JavaScript DOM编程艺术读后感(1)—— 平稳退化的更多相关文章

  1. javascript DOM 编程艺术 札记2 平稳退化

    定义 指的是即便浏览器不支持javascript,页面的基础展示功能也不会受到影响的做法. 不能平稳退化的实例 javascript:这种伪协议,它可以通过链接调用javascript函数.比如< ...

  2. 浅谈JavaScript DOM编程艺术读后感和一点总结

    最近工作不是很忙就想想想JavaScript的内部组成和一些要点,就是从这本书开始的.对新手来说还好,简单易懂. 简单终结下我重书中学到的一些要点. 下面都是个人学习的要点提取: 1.给自己预留退路, ...

  3. javascript+dom编程艺术 读后感

    利用上班空闲2,3天把这本书看完了,整体来说,这本书很不错.虽然我js有一定的基础了,jquery基础也会使用,但是我觉得对js应该有个循序渐进的理解,所以还是把js系统的学习一遍.我看技术类的书总数 ...

  4. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  5. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  6. 《JavaScript DOM 编程艺术》 学习笔记

    目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...

  7. JavaScript DOM 编程艺术

    最近把JavaScript DOM 编程艺术这本书看完了,觉得这本书很好 深入浅出地展示了渐进增强.平稳退化.结构和样式分离等编程思想,我对书中重要的知识进行了梳理总结. 一.网页 二.JavaScr ...

  8. JavaScript DOM编程艺术(第2版)的简单总结

    介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript.DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发. 下面介 ...

  9. JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析

    先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...

随机推荐

  1. mybatis在mysql和oracle批量插入不同

    两者不同 1,批量插入 2,主键自增 3,分页不同 4,......待补充 批量插入 mysql: <insert id="batchinsertSelective" par ...

  2. servlet与jsp

    Servlet生命周期 一.初始化阶段   当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例.调用init()方法进行Servlet的初始化 一.响应客户请 ...

  3. python基础操作_集合_三元运算

    #使用操作文件的时候,可以使用with函数#with open('E:\info.txt','a+') as fr#fr这个值可以是任意值# :#for line in fr:'''with open ...

  4. java面试笔试大汇总

    java面试笔试题大汇总5 JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象:2.继承:3.封装:4. 多态性: 2.String是最基本的数据类型吗? 基本数据类型包括byte.int. ...

  5. springMVC 配置和使用

    springMVC相对于Struts2学习难度较为简单,并且更加灵活轻便. 第一步:导入jar包 spring.jar.spring-webmvc.jar.commons-logging.jar.sp ...

  6. Navicat连接Oracle报错_Cannot load OCI DLL 87

    原因: Oracle需要装client才能让第三方工具通过OCI(Oracle Call Interface)来连接. 解决方案: 1. 去oracle官网下载Instant Client 11, 或 ...

  7. [编织消息框架][netty源码分析]6 ChannelPipeline 实现类DefaultChannelPipeline职责与实现

    ChannelPipeline 负责channel数据进出处理,如数据编解码等.采用拦截思想设计,经过A handler处理后接着交给next handler ChannelPipeline 并不是直 ...

  8. mysql中group by和order by同时使用无效的替代方案

    前言 最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生.在此做个记录,以备不时之需. 需求 首先,看一下 ...

  9. 集成python双版本详解

    最近要准备学习Python,由于版本上的差异,不知道要学哪个,现在好多东西都是基于python2基础的,但是python2在2020年左右就可能停止了,所以干脆决定两个都装上吧!   首先上官网上下载 ...

  10. 选课 树形DP+多叉树转二叉树+dfs求解答案

    问题 A: 选课 时间限制: 1 Sec  内存限制: 128 MB 题目描述 大 学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门 ...