vue中,什么时候要把this赋值给that,为什么要这么做?
如题,this指向的是当前运行的环境,在一个函数哪let that = this是不是为了改变this的指向,让this指向当前函数这个运行环境对象呢?
在vue中,为什么调用data里定义的值,需要用this?因为当前的运行环境是对象吗,是当前的这个.vue文件吗,它是个什么对象?
不知道是哪个大聪明踩了一下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
JS 中以
function
关键字声明的函数,其this
所指向的对象在调用时才能确定,而内层函数又不会自动继承外层函数的this
。有时候我们需要在内层函数中使用外层函数的
this
,这时候可以在外层定义var that = this
,然后在内层访问这个that
就行了,这里相当于给外层的this
起了个别名,而不是“改变this
的指向”。但是现在既然有了箭头函数,就没必要用这么麻烦的方法了。Vue
的各个方法中访问的this
指的是Vue
实例,这个this
是Vue
初始化的时候帮你绑定好的。首先从执行上下文的角度解释下
const that = this
。我们知道执行上下文包含:词法环境、变量环境、
this
、作用域链(outer)等,this
是和执行上下文绑定的。将this
赋值 给 一个变量/常量,目的将当前this
绑定到当前执行环境中的词法/变量环境中。什么时候需要这样操作?
嵌套函数中的 this 与你预期的不一致。
Vue中的this指向的是什么?
当前组件的实例。
this 不是指 .vue 文件,.vue 文件只是要通过 complier 处理的单文件组件,一种形式而已。 你或许经常在 vue 文档中看到 vm —— 组件实例。
如果你使用箭头函数,那么几乎不用
let that = this
。推荐学习 JavaScript this 的指向问题。先说结论吧:当在一个函数里定义另一个函数的回调函数时,就需要把
this
赋值给that
来看个例子吧:
如果直接这样使用,会发生什么呢?
显然,控制台会报错,如下
根据报错,我们可以定位到foo的回调函数里
也就是这段
这个函数里的
this
是什么呢?可以打印出来看一下显然错误的原因是回调函数内的this丢失了, 指向了window。函数试图去访问
widwon.state.lastName
,当然就会报错啦。有关this
指向问题,这里就不再赘述了。解决方案:
this
, 代码可以改成下面的形式这样做一般是为了保留this指向,有时候在一些内层函数内,他的this指向并不是当前的Vue实例,所以要定义一个值保存一下this,在需要访问调用Vue实例的时候使用
这只能说根据逻辑需要~