我是一名初级前端开发者,目前精力着眼于 Plain JavaScript 上,我的博客 if-true.com,原文链接:《JavaScript 设计模式与开发指南》笔记(一)。欢迎交流 :)
前后花了大约一周时间(2016-03-12——2016-03-19)将《JavaScript 设计模式与开发指南》通读了一遍,对设计模式也有了很基础的人数,外在的主要表现是如何减少过多的 if else
语句,内在则从维护和扩展角度出发。书中各个模式的简单实现代码我会在今后去重现、体会、整理。
本书笔记分为三个部分,也是按照全书目录三个部分划分的,当前是第一部分基础部分,另外两部分分别是:《JavaScript 设计模式与开发指南》笔记(二)、《JavaScript 设计模式与开发指南》笔记(三)
前言
设计模式的定义
在面向对象软件设计过程中针对特定问题的简介而优雅的解决方案。
第一部分 基础知识
第1章 面向对象的 JavaScript
JavaScript 中的原型继承
基本规则:
* 所有的数据都是对象 * 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它 * 对象会记住它的原型 * 如果对象无法响应某个请求,它会把这个请求委托给它自己的原型
第2章 this、call 和 apply
this
this 的指向,除去不常用的 with 和 eval 情况,实际应用可以分为以下四类
* 作为对象的方法调用 * 作为普通函数调用 * 构造器调用 * Function.prototype.call 和 Function.prototype.apply 调用
第3章 闭包和高阶函数
高阶函数
高阶函数是至少满足下列条件之一的函数
* 函数可以作为参数被传递 * 函数可以返回值输出
currying(柯里化)
currying 又称部分求值。一个 currying 的函数首先会接受一些函数,接受了这些函数后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存下来。待到函数被真正需要求值的时候,之前传入的所有参数会被一次性用于求值。
uncurrying
函数节流
将即将被执行的函数用 setTimeout 延迟一段时间执行。如果该延迟执行还没完成,则忽略接下来该函数的请求。
分时函数
惰性加载函数