Javascript箭头函数不适用场景
来自《Vue企业开发实战》
1. 在对象的方法中不建议使用箭头函数
const Person={
'username':'小暖','age': '18',
'sayHello': () => {
setInterval(() => { console.log('我叫' + this.username + '我今年' + this.age + '岁!') },
1000)
}}
Person.sayHello()
输出
我叫undefined我今年undefined岁!
输出结果有问题,因为方法写在了对象里,而对象的括号是不能封闭作用域的,所以此时的this还是指向全局对象,而全局对象下没有username和age属性,所以会出现问题。
2. 不能作为构造函数由于箭头函数的this具有不绑定的特点,不能使用箭头函数作为构造函数,如果这样做了,也会报错。
3. 定义原型方法定义原型方法时,也不推荐使用箭头函数,看下面这段代码。
function Person() {
this.username = "小暖"
}
Person.prototype.sayHello = () => {
console.log(this.username)}
var p1 = new Person();
p1.sayHello();
输出undefined
出现问题的原因是this指向window对象,这和使用箭头函数在对象中定义方法十分类似。
小结
箭头函数由于代码的简洁性和不绑定调用者this的特点,在非方法函数中使用最合适,而在方法函数中使用,需要特别注意它的this绑定问题,如果需要动态地修改this,建议不要使用箭头函数。