irpas技术客

[已解决]TypeError: Can not set property ‘xxx‘ of undefined报错情况分析_五花漏

未知 1112

之前我写过一篇 [已解决]TypeError: Cannot read property ‘xxx‘ of undefined报错情况分析

那篇报错说的是Cannot read ——“不能读取未定义的数据” 这个报错是Cannot set ——“不能设置未定义的数据”,也就是说你不能给未定义的数据赋值。

可以看到:如果一个变量a没有在data中定义,你这样去给它赋值: this.a = 'hello,world',是没有问题的。这说明跟 数据在不在data中定义 没啥关系。 问题在于this的指向

this.a 的 this 指的是当前的vue对象。

你看看你的报错的那一行的this,是指向的是谁?(可以打印出来看看)

你的this.xxx = xx…是不是写在了 axios, promise , setInterval, setTimeout中?这些默认都是指向最外层的window,因为匿名函数中的this指向的是windows(看看最后那张图片51行输出的this)。

解决:

1、暂存this。let that = this; 在内部用that.a代替this.a 2、箭头函数。

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。

箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者——vue对象

匿名函数中的this指向的是windows,和全局变量一样。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #已解决TypeError #can #not #set #property #xxx #of #undefined报错情况分析