💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# JavaScript Patterns ![JavaScript.patterns](https://box.kancloud.cn/2016-05-03_572816109f36a.jpg) **“JavaScript patterns”中译本** - 《JavaScript 模式》 - 作者:[Stoyan Stefanov](http://www.phpied.com/) - 翻译:[拔赤](http://jayli.github.com/)、[goddyzhao](http://goddyzhao.me)、[TooBug](http://www.toobug.net) 偷懒是程序员的优良品质,模式则是先人们总结的偷懒招式。Stoyan Stefanov 的这本书,从 JavaScript 的实际使用场景出发,提炼了不少可以让前端们偷懒的实用招式。模式的探索、创新,将永远是程序员自我提升的一条修炼之道。值得一读。 # 目录 ## [第一章 概述](chapter1.md) - [模式](chapter1.md) - [JavaScript:概念](chapter1.md#a2) - [面向对象](chapter1.md#a3) - [无类](chapter1.md#a4) - [原型](chapter1.md#a5) - [运行环境](chapter1.md#a6) - [ECMAScript 5](chapter1.md#a7) - [JSLint](chapter1.md#a8) - [控制台工具](chapter1.md#a9) ## [第二章 高质量JavaScript基本要点](chapter2.md) - [编写可维护的代码](chapter2.md#a2) - [减少全局对象](chapter2.md#a3) - [全局对象带来的困扰](chapter2.md#a4) - [忘记var时的副作用](chapter2.md#a5) - [访问全局对象](chapter2.md#a6) - [单 var 模式](chapter2.md#a7) - [声明提前:分散的 var 带来的问题](chapter2.md#a8) - [for 循环](chapter2.md#a9) - [for-in 循环](chapter2.md#a10) - [(不)扩充内置原型](chapter2.md#a11) - [switch 模式](chapter2.md#a12) - [避免隐式类型转换](chapter2.md#a13) - [避免使用 eval()](chapter2.md#a14) - [使用parseInt()进行数字转换](chapter2.md#a15) - [编码风格](chapter2.md#a16) - [缩进](chapter2.md#a17) - [花括号](chapter2.md#a18) - [左花括号的放置](chapter2.md#a19) - [空格](chapter2.md#a20) - [命名规范](chapter2.md#a21) - [构造器命名中的大小写](chapter2.md#a22) - [单词分隔](chapter2.md#a23) - [其他命名风格](chapter2.md#a24) - [书写注释](chapter2.md#a25) - [书写API文档](chapter2.md#a26) - [一个例子:YUIDoc](chapter2.md#a27) - [编写易读的代码](chapter2.md#a28) - [相互评审](chapter2.md#a29) - [生产环境中的代码压缩(Minify)](chapter2.md#a30) - [运行JSLint](chapter2.md#a31) - [小结](chapter2.md#a32) ## [第三章 直接量和构造函数](chapter3.md) - [对象直接量](chapter3.md#a2) - [对象直接量语法](chapter3.md#a3) - [通过构造函数创建对象](chapter3.md#a4) - [获得对象的构造器](chapter3.md#a5) - [自定义构造函数](chapter3.md#a6) - [构造函数的返回值](chapter3.md#a7) - [强制使用new的模式](chapter3.md#a8) - [命名约定](chapter3.md#a9) - [使用that](chapter3.md#a10) - [调用自身的构造函数](chapter3.md#a11) - [数组直接量](chapter3.md#a12) - [数组直接量语法](chapter3.md#a13) - [有意思的数组构造器](chapter3.md#a14) - [检查是不是数组](chapter3.md#a15) - [JSON](chapter3.md#a16) - [使用JSON](chapter3.md#a17) - [正则表达式直接量](chapter3.md#a18) - [正则表达式直接量语法](chapter3.md#a19) - [原始值的包装对象](chapter3.md#a20) - [Error对象](chapter3.md#a21) - [小结](chapter3.md#a22) ## [第四章 函数](chapter4.md) - [背景知识](chapter4.md#a2) - [术语释义](chapter4.md#a3) - [声明 vs 表达式:命名与提前](chapter4.md#a4) - [函数的name属性](chapter4.md#a5) - [函数提前](chapter4.md#a6) - [回调模式](chapter4.md#a7) - [一个回调的例子](chapter4.md#a8) - [回调和作用域](chapter4.md#a9) - [异步事件监听](chapter4.md#a10) - [超时](chapter4.md#a11) - [库中的回调](chapter4.md#a12) - [返回函数](chapter4.md#a12) - [自定义函数](chapter4.md#a14) - [立即执行的函数](chapter4.md#a15) - [立即执行的函数的参数](chapter4.md#a16) - [立即执行的函数的返回值](chapter4.md#a17) - [好处和用法](chapter4.md#a18) - [立即初始化的对象](chapter4.md#a19) - [条件初始化](chapter4.md#a20) - [函数属性——Memoization模式](chapter4.md#a21) - [配置对象](chapter4.md#a22) - [柯里化 (Curry)](chapter4.md#a23) - [函数应用](chapter4.md#a24) - [部分应用](chapter4.md#a25) - [柯里化](chapter4.md#a26) - [什么时候使用柯里化](chapter4.md#a27) - [小结](chapter4.md#a28) ## 第五章 对象创建模式 - 命名空间模式 - 通用的命名空间函数 - 声明依赖 - 私有属性和方法 - 私有成员 - 特权方法 - 私有化失败 - 对象直接量及其私有成员 - 原型及其私有成员 - 将私有函数暴露为共有方法 - 模块模式 - 暴露模块模式 - 创建构造器的模块 - 在模块中引入全局上下文 - 沙箱模式 - 全局构造函数 - 添加模块 - 实现这个构造函数 - 静态成员 - 共有静态成员 - 私有静态成员 - 对象常量 - 链式调用模式 - 链式调用模式的利弊 - method() 方法 - 小节 ## [第六章 代码复用模式](chapter6.md#a1) - [类式继承 vs 现代继承模式](chapter6.md#a2) - [类式继承的期望结果](chapter6.md#a3) - [类式继承 1 ——默认模式](chapter6.md#a4) - [跟踪原型链](chapter6.md#a5) - [这种模式的缺点](chapter6.md#a6) - [类式继承 2 ——借用构造函数](chapter6.md#a7) - [原型链](chapter6.md#a8) - [利用借用构造函数模式实现多继承](chapter6.md#a9) - [借用构造函数的利与弊](chapter6.md#a10) - [类式继承 3 ——借用并设置原型](chapter6.md#a11) - [类式继承 4 ——共享原型](chapter6.md#a12) - [类式继承 5 —— 临时构造函数](chapter6.md#a13) - [存储父类](chapter6.md#a14) - [重置构造函数引用](chapter6.md#a15) - [Klass](chapter6.md#a16) - [原型继承](chapter6.md#a17) - [讨论](chapter6.md#a18) - [例外的ECMAScript 5](chapter6.md#a19) - [通过复制属性继承](chapter6.md#a20) - [混元(Mix-ins)](chapter6.md#a21) - [借用方法](chapter6.md#a22) - [例:从数组借用](chapter6.md#a23) - [借用并绑定](chapter6.md#a24) - [Function.prototype.bind()](chapter6.md#a25) - [小结](chapter6.md#a26) ## [第七章 设计模式](chapter7.md#a1) - [单例](chapter7.md#a2) - [使用new](chapter7.md#a3) - [将实例放到静态属性中](chapter7.md#a4) - [将实例放到闭包中](chapter7.md#a5) - [工厂模式](chapter7.md#a6) - [内置对象工厂](chapter7.md#a7) - [迭代器](chapter7.md#a8) - [装饰器](chapter7.md#a9) - [用法](chapter7.md#a10) - [实现](chapter7.md#a11) - [使用列表实现](chapter7.md#a12) - [策略模式](chapter7.md#a13) - [数据验证示例](chapter7.md#a14) - [外观模式](chapter7.md#a15) - [代理模式](chapter7.md#a16) - [一个例子](chapter7.md#a17) - [中介者模式](chapter7.md#a18) - [中介者示例](chapter7.md#a19) - [观察者模式](chapter7.md#a20) - [例1:杂志订阅](chapter7.md#a21) - [例2:按键游戏](chapter7.md#a22) - [小结](chapter7.md#a23) ## 第八章 DOM和浏览器模式 - 分离关注点 - DOM 脚本编程 - DOM访问 - DOM操作 - 事件 - 事件处理 - 事件委托 - 长时间运行的脚本 - setTimeout() - Web Workers - 远程脚本 - XMLHttpRequest - JSONP - Frame和Image加载指示器 - 部署JavaScript - 合并脚本 - 代码减肥和压缩 - 过期头 - 使用CDN - 加载策略 - script标签的位置 - HTTP 分块 - 动态插入script标签非阻塞载入脚本 - 延迟加载 - 按需加载 - 预加载 - 小节 ## 索引