• 在什么情况下不能使用箭头函数
  • 发布于 2个月前
  • 122 热度
    0 评论
箭头函数,相信你一定不陌生,毕竟不管你是写vue还是react,或者是小程序,每天都在用嘛。但是,你可能不知道,在某些情况,我们是不能使用箭头函数的,如果不能用,你却用了,而且你还不知道为什么不能用,那就要出乱子了。

箭头函数的缺陷
1.没有arguments
当我们写一个普通函数,默认就有arguments参数,可以获取参数列表,而箭头函数是没有的。

2.无法通过apply,call,bind来改变this
箭头函数内部的this永远是父作用域的this,无法动态改变,这一点也没有普通函数好用。
const fn = () => {
    console.log(this)
}
fn();
结果:

哦,就是window对象嘛。如果我们希望用call去绑定this:
fn.call({name:'keke'});
不好意思,还是window

但普通函数就要可以,气不气?
const fn = function(){
    console.log(this)
}
fn.call({name:'keke'});

对象方法、原型方法不能用this
因为箭头函数的this指向父作用域,所以对象方法不能用箭头函数,原型(__proto__)同理。
let obj = {
    name : 'keke',
    say: () => {
        console.log(`my name is ${this.name}`)
    }
}
如下图,拿不到当前对象的name属性的。

箭头函数不能当构造函数
this都不能指向自己了,所以箭头函数肯定不能用来做构造函数。

箭头函数不能用于动态上下文
比如我们有个按钮,绑定了一个点击事件,如果你用箭头函数,里面希望用this获取当前的按钮对象,那么也是不行的,因为箭头函数中的this无法指向当前对象,在这个例子中就是按钮的dom。

vue的methods中,不能用箭头函数定义
你随便找一个vue的项目,你会发现它的methods中所有方法,都不是箭头函数,因为this无法指向当前的vue对象,也就拿不到data里面的值啦。

有人问,React中可以用嘛?由于vue组件本质是一个js对象,但是React本质是一个Class,所以在React中,可以用箭头函数。这一点比较特殊,要注意一下。为什么呢,因为this先指向了constructor,父作用域就是class,所以能访问到class的属性。
用户评论