一、改变this指向
注意:若不写指向的新对象,新对象变为window
1、函数方法call方法
对象方法/函数名.call(this指向的新对象,参数1,参数2...)
参数1,参数2:有实参就写,没有就不写
2、apply方法
对象方法/函数名.apply(this指向的新对象,[参数1,参数2...])
3、bind方法
var 新函数名=函数名.blind(this指向新对象)
对象方法/新函数名()调用新函数
二、Es6新特性
1、let和const 关键字
(1)声明变量
(2)区别
(面试题)let和var:let没变量提升(无预解析),let声明变量必须先定义再使用
let不能重复声明变量
let具有块作用域==花括号里面
cost和let:cost声明的变量称为常量,只能被赋值一次
cost num = 100
num = 200 //会报错
(3)应用场景
考虑兼容问题:使用var
变量可以多次赋值:let
变量只赋值一次后,不能再改变:const
2、箭头函数
(1)作用
简化匿名函数(表达式函数)的书写
(2)语法
()=>{} //语法
cost fun=function(){
}
等价于
cost fun = ()=>{}
(3)简写
形参只有一个,括号可以省略
(m)=>{}
等价于
m=>{}
函数体只有一行代码,花括号可以省略
()=>console.log('aaa')
函数体只有一行代码,并且代码是return语句,花括号和return省略
()=> {return 100}
等价于
() => 100
(4)箭头函数this指向问题
在事件处理函数中this--事件源(不是箭头函数)
箭头函数中this指向应用上下文中this对象
2、函数传递参数的时候默认值
(1)Es5实现
m=m ||50
(2)Es6实现
function fun(m=100){
函数体
}
fun()
3、解构赋值
(1)定义
快速从数组或者对象中取出成员的一个语法方法
(2)对象解构赋值
cost obj={name:'jack',age:'18'}
let {name,age}=obj //解构对象赋值给花括号中变量name和age
注意:花括号中变量名必须与对象属性名 相同
(3)数组解构赋值
let[a,b,c]=arr
a,b,c是随便取的变量
4、模板字符串
let str=`helloword`
5、展开运算符
(1)展开数组
let arr = [1,2,3]
...arr //等价于1,2,3
6、对象字面量简写
对象属性名和值变量名相同时,只写一个
let name='jack' //属性值变量
let age=28 //属性值变量
let obj={nam,age}