箭头函数
强大的东西。
比如我们遇到这样一个需求,要把数组中的值变为2倍。
//我们可能会使用for循环、forEach
//map可能有些人还没有用过
const number = [4,5,8,1]
const double = number.map(item=>{
return item * 2
})
//或者这样
const double = number.map((item,i) => {
console.log(`${i}:${item * 2}`)
})
//或者隐式返回
const double = number.map( item => item * 2)
箭头函数另一个强大的地方是在于this
例如下边:
const info = {
name:'Peter',
age:8,
hobbies:['game','painting','movie']
show: function() {
this.hobbies.map(function(item){
console.log(`${this.name} Loves ${item}`);
})
}
}
//如果这样写的话我们是取不到name的,因为方法中的this指的是函数作用域,函数中不存在name
//我们必须在函数中声明this为该对象
show: function() {
var mes = this
this.hobbies.map(function(item){
console.log(`${mes.name} loves ${item}`)
})
}
//但是我们使用了箭头函数,就不需要考虑this的问题
this.hobbies.map(item=>{
console.log(`${this.name}`)
})
不适用场景
箭头函数这么强大,是不是所有情况都适用呢?
当然不是,下面我们来列举一下不适用的情况
- 构造函数
new一个对象有四步,先创建对象,再取到参数,赋值给this的属性,然后推出整个对象。
那么在进行构造函数的时候,箭头函数是没有this指针的,所以进行构造函数时就会报错 - 定义对象原型方法
Info.prototype.updateInfo = ()=>{
this.name = "Tim"
}
//这时this也会代表window
addEventListener('click',()=>{this...})
这样也是不行的