在日常的开发过程中,我们经常会编写函数来完成各类功能,同时也经常遇到 this 关键字作用域失效的问题,下面的代码会演示 this 关键字丢失的现象及保持方法。
this 作用域丢失示例
<template>
<view>
<text>{{textContent}}</text>
</view>
</template>
<script>
export default {
data() {
return {
textContent : 'hi'
}
},
onLoad:function(){
// 丢失 this
setTimeout(function(){
this.textContent = 'test....';
// this 代表当前 function
// 所以无法完成对 textContent 变量赋值的工作
}, 1000);
},
methods: {},
}
</script>
<style>
</style>
解决方案 1 : 使用箭头函数保持 this
<template>
<view>
<text>{{textContent}}</text>
</view>
</template>
<script>
export default {
data() {
return {
textContent : 'hi'
}
},
onLoad:function(){
// 丢失 this
setTimeout(()=>{
this.textContent = 'test....';
// this 被保持
}, 1000);
},
methods: {},
}
</script>
<style>
</style>
解决方案 2 : 使用全局变量 _this
<template>
<view>
<text>{{textContent}}</text>
</view>
</template>
<script>
var _this;
export default {
data() {
return {
textContent : 'hi'
}
},
onLoad:function(){
_this = this;
setTimeout(function(){
_this.textContent = 'test....';
// this 被保持
}, 1000);
},
methods: {},
}
</script>
<style>
</style>