策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。
一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context, Context接受客户的请求,随后把请求委托给某一个策略类。要做到这点,说明Context中要维持对某个策略对象的引用。
发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。在JavaScript开发中,我们一般用事件模型来替代传统的发布—订阅模式。
发布-订阅模式有以下优点:
1.发布—订阅模式可以广泛应用于异步编程中,这是一种替代传递回调函数的方案。比如,我们可以订阅ajax请求的error、succ等事件。或者如果想在动画的每一帧完成之后做一些事情,那我们可以订阅一个事件,然后在动画的每一帧完成之后发布这个事件。在异步编程中使用发布—订阅模式,我们就无需过多关注对象在异步运行期间的内部状态,而只需要订阅感兴趣的事件发生点。
2.发布—订阅模式可以取代对象之间硬编码的通知机制,一个对象不用再显式地调用另外一个对象的某个接口。发布—订阅模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响它们之间相互通信。当有新的订阅者出现时,发布者的代码不需要任何修改;同样发布者需要改变时,也不会影响到之前的订阅者。只要之前约定的事件名没有变化,就可以自由地改变它们。
“他听见外面树林间刮起一阵风,感到风凉飕飕地透过纱窗吹进屋来。他把脸埋在枕头里躺了老半天,过了一会儿才不去想普罗登斯,终于睡着了。半夜醒来,听到屋外铁杉树林间的风声和湖上潮水的拍岸声,他又入睡了。早上,刮起了大风,湖水高涨,漫到湖滩上,他醒了老半天才想起自己的心碎了。”
——海明威《十个印第安人》
“说一声再见,就是死去一点点。”
“生命的悲剧不在于美丽的事物过早衰亡,而在于它们变得苍老和鄙俗。”
“你知道,故事的结尾并不重要,生活唯一确保我们的就是死亡。所以我们最好不要让那结尾,夺走了故事的光芒。”
——雷蒙德·钱德勒《漫长的告别》
“其实任何人,在经历时,都不会知道自己正在经历一生中最幸福的时刻。”
“我的胃里有午饭,脖颈上有阳光,脑子里有爱情,灵魂里有慌乱,心里则有一股刺痛。”
——奥尔罕·帕穆克《纯真博物馆》
1.没有this, super, arguments和new.target绑定。以上值由外围最近一层非箭头函数决定
2.不能通过new关键字调用。箭头函数没有[[Construct]]方法,所以不能被用作构造函数
3.没有原型。由于不可以通过new关键字调用箭头函数,因而没有构建原型的需求,所以构造函数不存在prototype这个属性
4.不可以改变this的绑定。函数内部的this值不可被改变,在函数的生命周期内始终保持一致
5.不支持arguments对象。因此需要通过命名参数和不定参数的形式来访问函数的参数
6.不支持重复的命名参数
new.target:
元属性,可以通过函数的new.target是否存在来判断一个函数是否是通过new关键字调用的
[[Construct]]方法:
js函数有两个不同的内部方法:[[Construct]]和[[Call]]。当通过new关键字调用函数时,执行的是[[Construct]]函数,它负责创建实例对象,然后执行函数体将this绑定到该实例上;如果不使用new关键字调用函数,则执行[[Call]]函数,从而直接执行代码中的函数体。具有[[Construct]]方法的函数被统称为构造函数。箭头函数没有[[Construct]]方法,所以不能通过new来调用
参考资料:《深入理解ES6》
有时候我们想要过滤对象中的某个或者多个属性,只保留想要的属性
例如我们想把下面的对象中的isSingle和isMarried去掉
1 | const obj = { |
这时可以采用解构的方法:
1 | const { isSingle, isMarried, ...resObj } = obj |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true