Effective JavaScript :第六章
1.将undefined看成没有值
产生undefined的情况:
①未赋值的变量的初始值为undefined。
var x ;
X ; //undefined
②访问对象中不存在的属性也会产生undefined。
var obj = {} ;
obj.x ; //undefined
③函数体结尾使用未带参数的return语句,或未使用return语句都会产生undefined。
function f(){
return ;
}
function g(){};
f(); //undefined
g(); //undefined
④未给函数参数提供实参则该函数参数值为undefined。
function f(x){
return x ;
}
f(); //undefined
2.接收关键字参数的选项对象
一个函数起初很简单,然而一段时间后,随着库功能的扩展,该函数的签名会获得越来越多的参数。尝试理解下面的函数调用:
Var alert = new alert(100,75,300,200,
”error”,message,
”blue”,”white”)
幸运的是,JavaScript提供了一个简单的、轻量的惯用法:选项对象。选项对象在应对较大规模的函数签名时运作良好。
var alert = new alert({
x : 100 , y : 75 ,
width : 300 , height : 200 ,
title : “error”, messagr : message ,
titleColor : “blue”, bgColor : “white”
})
选项对象的好处是易于阅读,所有参数都是可选的,调用者可以提供任一可选参数的子集。
extend函数
function extend(target , source){
if(source){
for(var key in source){
var val = source[key];
if(typeof val !== ‘undefined’){
target[key] = val ;
}
}
}
return target ;
}
3.区分数组对象和类数组对象
①API绝不应该重载与其他类型有重叠的类型
②当重载一个结构类型与其他类型时,先测试其他类型。
③当重载其他对象类型时,接收真数组而不是类数组对象。
4.支持方法链
无状态的API的部分能力是将复杂操作分解为更小的操作的灵活性。一个很好的例子是字符串的replace方法。
在无状态方法中返回新对象来支持方法链:
var users = records.map(function(record){
return record.username ;
})
.filter(function(username){
return !!username ;
})
.map(function(username){
return username.toLowerCase() ;
}) ;
有状态的API的方法链有时被称为流畅式。如果更新方法没返回this,那么API的使用者不得不每次重复该对象的名称。例如:
$(“#notification”)
.html(“Server not responding.”)
.removeClass(“info”)
.addClass(“error”) ;
Effective JavaScript :第六章的更多相关文章
- [Effective Java]第六章 枚举和注解
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Effective JavaScript :第二章
1.熟练掌握闭包 理解闭包要学会三个基本的事实: ①JavaScript允许你引用在当前函数以外定义的变量: 例如: function makeSandwich(){ var magicIngredi ...
- Effective JavaScript :第一章
第一章 一.严格模式与非严格模式 1.在程序中启用严格模式的方式是在程序的最开始增加一个特定的字符串字面量: ‘use strict’ 同样可以在函数体的开始处加入这句指令以启用该函数的严格模式. f ...
- JavaScript 第六章总结: Getting to know the DOM
前言 这一章节介绍 DOM, 使用 DOM 的目的是使的网页能够变得 dynamic,使得 pages that react, that respond, that update themselves ...
- javascript第六章--BOM
① window对象 ② location对象 ③ navigator对象 ④ screen对象 ⑤ history对象
- 读《编写可维护的JavaScript》第六章总结
第六章 避免使用全局变量 JavaScript执行环境在很多方面都有其独特之处,全局变量就是其中之一.“全局变量”是一个神秘的对象,它表示了脚本的最外层上下文. 在浏览器中,windows对象往往重载 ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合
前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...
- 《Javascript高级程序设计》阅读记录(六):第六章 下
这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 <Javascript ...
- [书籍翻译] 《JavaScript并发编程》第六章 实用的并发
本文是我翻译<JavaScript Concurrency>书籍的第六章 实用的并发,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript ...
随机推荐
- liunx系统磁盘满的时候如何排查
第一步:查看磁盘总体情况 命令: df -lh 可以看出/dev/vda1, 不过这是个设备的名称不是对应的目录,其实/dev/vda1设备对应的目录名称是/home下面 或者可以全局搜索哪个目录下面 ...
- 批处理+组策略 实现规定时间段无法开机and定时关机
某爱熬夜的人对付自己的东西 1.shutdown命令 shutdown -a #取消现有的shutdown计划 shutdown -s -t [time] #设定时间关机 shutdown -r -t ...
- HTML <button>标签
如果<button>标签在<form>中不加type="button",那么默认含义是"submit". <button>标 ...
- 使用ab对站点进行压力测试
测试指令: window下: E:\wamp\bin\apache\Apache2.2.21\bin> .\ab -V //查看是否按照了ab:(V 大写) E:\wamp\bin\apach ...
- C#编程之“串口通讯多次接收”
摘要: 主要记录了再C#的串口开发时遇到的问题,以便后续遇到相同问题再重复砍树造轮子. 1.问题场景 板卡和PC间通过UART进行数据通讯,由PC给板卡发送控制命令,板卡返回相应的数据. 2.遇到的问 ...
- CodeForces 340E Iahub and Permutations
容斥原理,组合数. 找出有$cnt$个数字还有没放,那么总方案数就是$cnt!$. 总方案数里面包含了正确的和非正确的,我们需要将非正确的删去. 先删去$1$个数字$a[i]=i$的情况,发现会多删, ...
- CodeForces 711A Bus to Udayland
简单题. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #inclu ...
- hdu1031
#include <cstdio> #include <cstdlib> struct element{ int id; double sa; }e[10000]; int c ...
- ActiveMQ in Action(7) - Wildcards
关键字: activemq 2.6.7 Wildcards Wildcards用来支持联合的名字分层体系(federated name hierarchies).它不是JMS规范的一部分,而是A ...
- mysql bit类型数据库中无法显示
表an_bit bit类型字段id select bin(id+0) from an_bit显示二进制 select id+0 from an_bit显示十进制 http://blog.csdn.ne ...