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,建议不要使用箭头函数。

posted @ 2021-03-17 19:00  Jeff_blog  阅读(151)  评论(0编辑  收藏  举报