gpt4 book ai didi

javascript - 为什么我得到了 "Uncaught TypeError: Cannot read property ' counter' of undefined"尽管我使用了 SetTimeout 的箭头函数?

转载 作者:行者123 更新时间:2023-12-03 06:43:54 25 4
gpt4 key购买 nike

以下小倒计时应用程序导致未捕获的类型错误:无法读取未定义的属性“计数器”在评估 this.counter 时。

<template>
<v-app>
<v-content>
Redirect after {{counter}} sec.
</v-content>
</v-app>
</template>

<script>
/* eslint-disable no-console */
export default {
name: 'App',

components: {
},
mounted() {
this.countdown();
},
created() {
},
methods: {
countdown: () => {
setTimeout(() => {
if (--this.counter <=0){
location.href=this.$redirectURL;
} else {
this.countdown();
}
}, 1*1000);
}
},

data: () => ({
counter: 5,
}),
};
</script>

未捕获的类型错误:无法读取未定义的属性“计数器”如下:

enter image description here

我不知道为什么 柜台 被评估为 未定义 尽管我使用了箭头函数,这意味着“ 这个指针”的范围必须是词法的。谢谢你的建议!

最佳答案

countdown function 是一个箭头函数,这意味着 this它内部是从外部范围继承的。 setTimeout 也是如此。打回来。所以在这里:

export default {
// ...
methods: {
countdown: () => {
setTimeout(() => {
if (--this.counter <=0){
location.href=this.$redirectURL;
} else {
this.countdown();
}
}, 1*1000);
}
},
// ...
}
thisthis在模块的顶层,即 undefined在您的设置中。

你想要 this改为引用当前实例:调用 countdown 时,它应该捕获新的 this值(实例的),而不是继承 this的外部范围。所以,改变:
countdown: () => {


countdown() {

或者
countdown: function() {

关于javascript - 为什么我得到了 "Uncaught TypeError: Cannot read property ' counter' of undefined"尽管我使用了 SetTimeout 的箭头函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60293593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com