
JS设计模式之单例模式
意图 {#意图} -------- > 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 > > ------《设计模式:可复用面向对象软件的基础》中文版第96页 这个概念有些类似于全局变量,它确保所有引用都访问到唯一的实例对象,这可以节省掉创建对象的开销。但是,相应地,在懒加载模式下,它也带来了检查是否已经创建对象的开销。所以还是要根据情况灵活选择...
意图 {#意图} -------- > 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 > > ------《设计模式:可复用面向对象软件的基础》中文版第96页 这个概念有些类似于全局变量,它确保所有引用都访问到唯一的实例对象,这可以节省掉创建对象的开销。但是,相应地,在懒加载模式下,它也带来了检查是否已经创建对象的开销。所以还是要根据情况灵活选择...
意图 {#意图} -------- > 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 > > ------《设计模式:可复用面向对象软件的基础》中文版第212页 这个常常被运用于游戏存档、操作撤销等场景。 示例 {#示例} -------- 这是一个悲催的故事,内容是一个人先涨薪...
源码 {#源码} -------- 前往[Codepen](https://codepen.io/kifuan/pen/vYdzpPz)在线体验。 介绍 {#介绍} -------- **防抖** 和**节流**是两个JS中的概念,它们被广泛应用于被频繁触发的事件中,如搜索框在输入时会弹出候选列表:如果每次输入都发送一个AJAX请求来获取数据,那么后台就要被刷爆了。所以,...
意图 {#意图} -------- > 用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 > > ------《设计模式:可复用面向对象软件的基础》中文版第89页 所以这里说的原型类似于对象的蓝图。但是,由于JS的灵活性,这个设计模式对于JS来说不是很重要。 > 因为在像C++这样的静态语言中,类不是对象,并且运行时只能得到很少或者得...
意图 {#意图} -------- > 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 > > ------《设计模式:可复用面向对象软件的基础》中文版第106页 值得注意的是,在JS中,我们对于数据类型的适配(把后端传来的JSON转成我们希望的格式)也应属于适配器的范畴,所以下文中分别叙述...
背景 {#背景} -------- 我没有系统性的从头开始学过一遍JS,全凭之前学的其它语言,尤其是Python,直接上手操作了,所以留了不少的坑。 虽然对我来说是一个坑,但我觉得本文更适合放到学习的分类里。 给出下列代码。这里是对原问题的一个抽象,只是把问题的核心单独摘出来了: |------------------------------------|-------...
源码 {#源码} -------- > 来自半年后的说明:我把代码转放到 gists 里了,当时代码风格受 Python 影响较大,这里就不再更改了,毕竟大家本地都有自己的格式化工具。 点击[这里](https://gist.github.com/hikariyo/b838dff3bdf0d280b25f50a66abd699c)前往Github获取本文源码。 需求...
背景 {#背景} -------- 遍历数组的时候,我相信大多数人已经用上ES6的`for...of`语法了: |---------------------|--------------------------------------------------------------------------------------| | ``` 1 2 3 4 5 6 ```...
<h2>实现 {#实现}</h2> <p>代码看起来很简单,这里就直接给出来了:</p> <p>|---------------------------------------------------|-----------------------------------------------------------...
背景 {#背景} -------- 在JS中并没有原生枚举的实现,可以通过下面几种方法来模拟类似的操作。 直接使用字符串 {#直接使用字符串} ------------------ 上代码: |---------------------------------------|-------------------------------------------------...