06-ES6特点

ES,即ECMAScript,js语法,如ES5或ES6都是js语法发展过程中发布的版本。
浏览器会去跟进发布新版本,来支持,比如ES6等。
兼容性:对浏览器要考虑哪些是ES5或ES6的,确认浏览器是否都支持。
特性举例:
模版字符串,就是ES6的其中一个功能特性
1`${key}`
1. 定义变量
let严格的变量定义(用法与var基本一致)- 必须先定义再使用
- 变量不允许重名
- 只在定义的作用域内生效
const常量定义- 不允许被二次赋值
var 的问题:变量声明提升(不同作用域里是可以同名的),因为会预解析,块级作用域外也可以访问等,都是缺点。
1 | |
案例:选项卡-块级作用域
改造区域:
1 | |
代码:
1 | |
效果一样:

2. 箭头函数
语法:
() => { 代码 }与 function() { 代码 } 功能相同a => { 代码 }只有一个形参时,( ) 可以省略a => a*100只有一句代码 或 只有返回值时,{ } 和 return 都可以省略- 只返回一个值对象时,箭头函数需特殊处理,将返回的
对象上加小括号 ({ key: value,... }) - 箭头函数无法使用 函数内置参数对象
arguments,需要显式的写形参(arg1, arg2...) => {代码} - 箭头函数在事件绑定回调函数中通过
this 可以直接拿到事件绑定的元素对象
1 | |
示例:
1 | |
3. 解构赋值
解构赋值,快速的从对象和数组中获取里面的成员。
- 数组/多维数组:
[ ] 对号入座 - 对象/复杂对象:
{ } key值对号入座,如果key值涉及重命名则通过旧名字:新名字重命名- 复杂对象,拷贝结构,保留key,删掉值
1 | |
4. 对象简写
- 当对象的key值与变量定义一样时,就可以简写为只有key,如
let obj = {username, password} - 对象中的方法
getName: function() {}可以简写为getName() {}
1 | |
5. 展开运算符
... 展开运算,可用在不同的场景。
- 展开数组赋值
- 复制数组,深拷贝效果
- 展开形参,必须作为最后一个形参或者独立参数,接收剩余参数
- 展开实参,解构传入实参
- 展开对象,合并对象key-value,同名会 后覆盖前(在处理修改字段提交给后端时很实用 - 如示例代码)
1 | |
对象合并效果:

6. 模块化语法
模块化:①私密不漏 ②重名不怕 ③依赖不乱
条件:必须在 live server 模式下运行,否则模块化引入的js是不生效的。
模块化是一种思想。
export{...}js文件中导出供外部使用的方法(未导出的不能被使用)import{..., func as func1, ...} from 'x.js'页面文件中导入所需的js方法,as可重命名<script type="module">js脚本类型限定为 module,才是模块化语法- 特殊:
export default func导出import funccc from 'x.js'导入,不需要{}且可随意命名
示例:
./module/a.js
1 | |
./module/b.js
1 | |
./module/c.js (依赖了a.js和b.js中的方法)
1 | |
./index.html
1 | |
7. 面向对象
7.1 创建对象
面向对象,一种思想,一种编程模式。
Objectjs给我们内置了一个构造函数,用来创建对象
遵循规范:
首字母大写- 构造函数
不写return - 构造函数可以当成普通函数用,但是不会这么做
this 指向 new 出来的实例化对象
1 | |
7.2 面向对象的原型
prototype原型,共享内存,且对象能够直接访问到原型上定义的方法对象.__proto__ === 构造函数.prototype
- 原型链概念:如 obj.toString() 方法是怎么来的?
- 先从自己身上找 >>
__proto__身上找 >>prototype身上找 >> 再往上一级找… >>Object.prototype.__proto__最终找到了Object上
- 先从自己身上找 >>
语法参考:
1 | |
案例:面向对象应用
1 | |
效果:

原型的方法是否会被覆盖的验证:
1 | |
案例:选项卡-面向对象+模块化
./Tabs.js
1 | |
./index.html
1 | |
效果:

7.3 class
语法:
1 | |
示例:选项卡-面向对象+模块化+class 改造
./Tabs.js
1 | |
效果是一致的。
7.4 继承
- 构造函数继承
1 | |
- 原型继承
1 | |
- 组合继承(
一般都是组合继承)
1 | |
示例:
1 | |
案例:继承应用
添加一个图片的属性。
1 | |
效果:

7.5 ES6继承
class 子类 extends 父类 {}ES6继承语法(类似java写法,好记)super(arg...)构造函数;super.方法()普通函数
1 | |
示例:
1 | |
案例:继承应用-ES6改造
核心:extends 继承、super父类构造函数和调用父类方法、子类重名方法的重写增强、render渲染放在构造函数中
1 | |
效果是一样的。
1 | |
06-ES6特点
https://janycode.github.io/2018/05/07/04_大前端/03_JavaScript/06-ES6特点/