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 :第六章的更多相关文章

  1. [Effective Java]第六章 枚举和注解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. Effective JavaScript :第二章

    1.熟练掌握闭包 理解闭包要学会三个基本的事实: ①JavaScript允许你引用在当前函数以外定义的变量: 例如: function makeSandwich(){ var magicIngredi ...

  3. Effective JavaScript :第一章

    第一章 一.严格模式与非严格模式 1.在程序中启用严格模式的方式是在程序的最开始增加一个特定的字符串字面量: ‘use strict’ 同样可以在函数体的开始处加入这句指令以启用该函数的严格模式. f ...

  4. JavaScript 第六章总结: Getting to know the DOM

    前言 这一章节介绍 DOM, 使用 DOM 的目的是使的网页能够变得 dynamic,使得 pages that react, that respond, that update themselves ...

  5. javascript第六章--BOM

    ① window对象 ② location对象 ③ navigator对象 ④ screen对象 ⑤ history对象

  6. 读《编写可维护的JavaScript》第六章总结

    第六章 避免使用全局变量 JavaScript执行环境在很多方面都有其独特之处,全局变量就是其中之一.“全局变量”是一个神秘的对象,它表示了脚本的最外层上下文. 在浏览器中,windows对象往往重载 ...

  7. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  8. 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合

    前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...

  9. 《Javascript高级程序设计》阅读记录(六):第六章 下

    这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 <Javascript ...

  10. [书籍翻译] 《JavaScript并发编程》第六章 实用的并发

    本文是我翻译<JavaScript Concurrency>书籍的第六章 实用的并发,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript ...

随机推荐

  1. Perception(1.2)

    4.1.2 Definition of Coordinate Systems The global coordinate system is described by its origin lying ...

  2. emacs 使用教程

    http://www.cnblogs.com/liuchaogege/p/4464211.html

  3. CPU和GPU的区别

    个人认为CPU和GPU各有自己的适应领域.CPU(Central Processing Unit)计算核心较少,通常是双核.四核.八核,但是拥有大量的共享缓存.预测.乱序执行等优化,可以做逻辑非常复杂 ...

  4. 使用visualvm 远程监控 JVM

    1. 测试环境 Ubuntu Server 10.01 2.  在服务器上安装 jstatd 组件 使用apt-get 命令安装 openjdk 即可 : sudo apt-get install o ...

  5. CodeForces 670D Magic Powder

    二分. 二分一下答案,然后验证一下. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cst ...

  6. 5.MyBaits调用存储过程

    1.创建一个javaweb项目MyBatis_Part4_Procedure 2.在src下创建procedure.sql文件 --创建表 create table p_user( id number ...

  7. Java Socket编程基础(1)

    参考资料: <Java网络编程精解> 孙卫琴 一.socket通信简介 什么是socket,简单来说,在linux系统上,进程与进程之间的通信称为IPC,在同一台计算机中,进程与进程之间通 ...

  8. Qt通过极光推送向app推送消息

    简介 最近在做个项目,当客服端收到防盗的消息通知时向手机app推送一个消息,告知有防盗报警.这么小的功能没必要自己写个推送端,极光推送免费而且推送的成功率高,已经能满足我们的需求了. 极光推送的文档大 ...

  9. Uploadify 上传后的文件删除,上传队列无法更新问题

    1. 定义一个上传限制数量 var uploadLimit = 3; 2. 点击页面的删除图片成功后,将uploadLimit++操作 3. 通过uploadify的settings方式重置上传限制数 ...

  10. IIS7添加mp4 MINE类型报错:无法写入配置文件

    解决方法: 方法一: 可能是由于文件为只读属性,所以修改网站文件访问权限,把此文件夹或者文件的写入权限给了这个用户. 方法二: 可能由于网站目录所在的分区是fat32格式,所以要把网站目录放在NTFS ...