在微信小程序中,that 和 this 在使用上没有本质的区别,它们都是用来指代当前对象的关键字。然而,在某些特定的编程场景下,为了避免 this 指向变化导致的问题,可以通过 that 来保存 this 的引用。
// pages/index/index.js Page({ data: { message: 'Hello, Mini Program!', }, onLoad: function () { // 使用 this 指代当前 Page 对象 console.log(this.data.message); // 输出: Hello, Mini Program! // 将 this 保存在 that 中 var that = this; // 在异步回调中使用 that,确保作用域不变 setTimeout(function () { // 这里的 this 指向的是 setTimeout 的上下文,不再指向 Page 对象 // 所以使用 that 来访问 Page 对象的属性 console.log(that.data.message); // 输出: Hello, Mini Program! }, 1000); }, onTap: function () { // 使用 this 指代当前 Page 对象 console.log(this.data.message); // 输出: Hello, Mini Program! } });
解释与建议
this 的使用:在大多数情况下,this 可以直接用来访问当前对象的属性和方法,比如在 onLoad 和自定义的函数中。
that 的用法:在涉及到异步操作或者回调函数中,为了确保能够访问到外层对象(比如 Page 对象)的属性和方法,可以将 this 赋值给 that,以便在回调函数中使用。
注意事项:微信小程序中的函数作用域和 this 的指向可能会因为异步操作而改变,使用 that 可以避免这种问题。