vue中that是什么

vue yekong

在Vue.js中,this关键字用于引用当前Vue实例。然而,在某些情况下,尤其是在回调函数中,this的上下文可能会改变,导致无法直接访问Vue实例。为了解决这个问题,开发者可能会在进入回调函数之前,将this赋值给另一个变量,通常命名为that,以便在回调函数内部能够访问Vue实例。

这种做法主要是JavaScript的作用域和闭包的概念。在ES6之前,JavaScript没有块级作用域,this在不同的上下文中指向可能会变化,尤其是在异步回调中。通过将this赋值给that或其他变量,可以确保在回调函数中能够正确引用到期望的上下文。

例如:

export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    exampleMethod: function() {
      var that = this;
      setTimeout(function() {
        console.log(that.message); // 使用that来引用Vue实例
      }, 1000);
    }
  }
}

在上面的例子中,setTimeout的回调函数中的this并不指向Vue实例,因为setTimeout是Window对象的方法,所以在这个回调函数中this默认指向Window对象。通过在回调函数外部将this赋值给that,然后在回调函数内部使用that来引用Vue实例,从而可以访问到Vue实例的数据和方法。

随着ES6的普及,现在更推荐使用箭头函数来处理这个问题,因为箭头函数不会创建自己的this上下文,而是继承外层函数调用的this值:

export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    exampleMethod: function() {
      setTimeout(() => {
        console.log(this.message); // 直接使用this来引用Vue实例
      }, 1000);
    }
  }
}

在这个例子中,我们使用箭头函数作为setTimeout的回调,这样就不需要that变量,因为箭头函数会捕获其所在上下文的this值,即Vue实例。

总的来说,that是开发者为了在特定的作用域中保持对Vue实例this的引用而创建的变量。随着ES6箭头函数的使用,这种做法变得不那么常见了。

喜欢