Vue中this的指向问题

在methods中的方法并没有使用箭头函数,但this指向undefined,并没有指向vue实例。代码如下:

<template>
  <div>
    <a href="javascript:;" @click="checkOrder(record._id, true)">通过</a>
  </div>
</template>
methods: {
  checkOrder(orderId, check) {
    // 使用axios请求数据
    this.$http.post(api.order.check, { orderId, check })
      .then(res => {
        console.log(this) // undefined
        // 为什么这里this为undefined,而不是vue实例?
      }).catch(err => {
        this.$message.error(err.message)
      })
  }
}

问题:为什么axios请求数据后的then中this指向undefined而不是vue实例?

阅读 3.4k
1 个回答

首先你是用了箭头函数!参考你第二段代码的第4行
其次:

在JS中,箭头函数并不是简单的function(){}匿名函数的简写语法糖,实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,在编写函数时就已经确定了,由上下文确定。而匿名函数的this指向运行时实际调用该方法的对象,无法在编写函数时确定。
不可以当做构造函数,也就是说,不可以使用 new 命令,否则会抛出错误。
this、arguments、caller等对象在函数体内都不存在。
不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。
箭头函数除了传入的参数之外,其它的对象都没有!在箭头函数引用了this、arguments或者参数之外的变量,那它们一定不是箭头函数本身包含的,而是从父级作用域继承的。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题