ES6
本文对ES6的一些简单用法进行介绍,希望对您有所帮助
ES6
一. 定义变量
let 与var 的区别
let必须先定义再使用
变量重名 let 的会报错 var不会
块级作用域
let 会被括号{ }限制
var 只会被function限制
const 常量 必须赋初值 后面不可再被赋值
二. 箭头函数
格式
var test = () => {
..
}
小括号可以省略
条件 形参只有一个
var test = a=>{
}
大括号可以省略
只有一句代码时
只有一个return 时 return也可以省
没有arguments
arguments 是用来获取形参 的一个伪数组
this问题
箭头函数this 是父级作用域的
三. 解构赋值
按照结构快速从数组中取值
交换 a b值
1
2
3
var a = 10
var b = 20
var [b,a] = [a,b]多维数组取值
1
2
3
4
var arr = [1,2,[3,4,[5]]]
//取5
var [a,b,[c,d,[e]]] = arr
// e 即为值快速取对象中的值
1
2
3
4
5
6
7
8
var obj = {
name:"kai",
age:100,
location:111
}
let {name,age,location} = obj
// 要对应 对号入座
// 有时候会重名 解决方法:location:mylocation \ 或者用var \ 用.获取
四. 对象简写
- 当key 和 变量 一致时可以省略一个
- 值为函数时可以省掉 :function
五. 展开运算符
三个点
1
2
3
4
var a = [1,2,3]
var b = [4,5,6]
var d = [a,b] // [[1,2,3],[4,5,6]]
var c = [...a,...b] // 1 2 3 4 5 6不确定数形参
实参 也会对号入座
伪数组转化
var arr = […arguments]
合并对象
var obj = {
…obj1,
…obj2
}
六. 模块化语法
使用方法
1
export {函数名1,函数名2,...}
1
2
3
<script type="module">
import {函数名1,函数名2,...} from './文件包名/文件名.js'
</script>解决问题
私密不漏 不能调js文件中的私密函数
重名问题 导入多个时如果有重名会提示报错
1
import {函数名1,函数名2 as 新函数名2,...}
依赖不乱 导入顺序不对会出问题
可以在需要调用别的js文件的文件中import导入
七. 面向对象
创建对象
字面量
new 方法
工厂函数
自定义构造函数
注意:
首字母大写 推荐
构造函数无return 无意义
1
2
3
4
5
function CreateObj(name){
this.name = name
this.a = 1
}
var obj1 = new CreateObj(111)原型
共用内存
构造函数.prototype.共享函数 = 。。。
对象.__ proto__ === 构造函数.prototype
扩展 原型链
对象调用方法时 先找自己有没有 再找构造函数的prototype 没有再找上一级的
顶点为Object
ES6 的class
语法糖 单纯的换了个形式
1
2
3
4
5
6
class Create{
constructor{
//构造函数
}
。。。
}继承
语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//构造函数继承 -- 属性继承
//无法继承方法
function person(name,age) {
this.name = name
this.age = age
}
person.prototype.say = function(){
...
}
function student(name,age,grade){
person.call(this,name,age) //call 改变了this指向 由window指向student构造函数
this.grade = grade
}
//原型继承
student.prototype = person.prototype //不可取 会相互改变影响
student.prototype = new person() //不相互影响 但会多废料 但不会影响
student.prototype.print = function(){...} //增加方法
student.prototype.say = function(){...} //覆盖方法
student.prototype.say2 = function(){ //增强方法 重起个名字
this.say()
...
}
//组合继承 -- 两者结合ES6 继承
1
2
3
4
5
6
7
//extends 原型继承
class student extends person{
constructor(name,age){
super(name,age) //person.call(this,name,age)
this.grader = grade
}
}