模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。
more >>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 |
题目描述:
利用Promise实现交替打印红绿黄,红灯持续2s,绿灯持续3s,黄灯持续1s,不断循环。
代码:
1 | async function handleTrafficLights() { |
clientWidth | 对象内容可视区的宽度,不包括滚动条等边线,会随对象显示大小的变化而改变 |
scrollWidth | 对象实际内容的宽度,不包括边线宽度,会随对象内容超过可视区后而变大 |
offsetWidth | 对象整体的实际宽度,包括滚动条等边线,会随对象显示大小的变化而改变 |
window.innerWidth | 浏览器窗口外部的宽度。 它表示整个浏览器窗口的宽度,包括边栏 |
window.outerWidth | 浏览器可视区域的宽度,也就是页面的宽度 |
图示:
1 | const arr = [1, 2, 3, 4, 5, 6, 7, 8] |
1 | const array = [1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c']; |
1 | const arr = [1, 2, 3, 4, 5] |
函数式编程实际上比较复杂,所以本文也只是泛泛而谈,简单聊聊函数式编程特点以及函数式编程思维在js日常开发中的体现
函数式编程特点:
这点在js中体现得很明显了,函数是“一等公民”意味着意味着函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
more >>最近在菜鸟教程看了 grid 布局的相关文档,只能说 grid 布局真是非常强大的一种 css 布局方式,我与它相见恨晚
菜鸟教程链接:https://www.runoob.com/css3/css-grid.html
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