微信小程序中,什么时候才把this编程that?
发布于 5 年前 作者 jiefeng 5665 次浏览 来自 官方Issues

微信小程序中,什么时候才把this编程that?以前一直有个习惯,就是在函数体内都会改变下this,然后今天被老大说了,我只是用let that=this 是为了存一个当前指向的this,但是具体什么时候去存这个this还是比较模糊,希望来个人帮我解答一下,谢谢~

10 回复

不一定要用that啊,let abcd = this都可以

Page({
    onLoad: function () {
        let that = this
        setTimeout(function () {
            that.setData({...})
        }, 1000)
    }
})

例如这种情况。

反正就是出现闭包,或者别的跨实例的调用,或者此this非彼this的状况。那你就需要通过that = this或者别的什么东西来把原来的this传进去。

个人觉得,还是要搞清楚this的指向作用域,不是哪哪都来个let that = this,看着都难受。如果闭包的函数里有用到这个函数体的this,那么page的this就需要给重新绑定一下,否则就会乱了。如果没有,用箭头函数就行了,基本不会有啥作用域出错的情况~!~

console.log(this)一下呗

在方法内部使用this的时候,通过this能不能拿到外部(你想要的)的属性或方法,拿不到则用let that = this,拿的到就不需要了;

强烈建议使用箭头函数,箭头函数内部与其外部的this是保持一致的;

其实只要多看下什么情况下用箭头函数 就能解决你这个问题了。

还有哦,这里的this指向应该也是没有被改变的把?所以我也没有必要去声明那个that了对吧?其次,关于变量名…我是真的快起疯了- -

楼上说得都对

比如ajax请求数据的成功回调里、需要that=this ,或者定时器里需要this的时候 外面定义that = this

箭头函数解决一切问题

你们老大估计也不是很懂吧

回到顶部