Vue中this的指向问题
Vue中this指向
最近一直在做毕业设计,学习了Vue用来写了很多的前端代码,不得不说js对我这个“Java前端程序员”有些太不友好,时不时都能遇到一些坑,this就是其中之一。
1 问题代码
为了凸显问题,简化了代码,outerFunction调用了innerFunction,outerFunction中的消息提示框能够显示出来,而innerFunction中就提示:this.$message is not a function。这是什么问题呢?
export default {data() { // ...},methods: {outerFunction() {this.$message({type: 'success',message: 'outer!'});this.$options.methods.updateHandler();},innerFunction() {this.$message({type: 'success',message: 'inner!'});}}
}
在简化之后可能很容易就发现了问题应该出在this上,而当时由于代码太多了,我误以为是其他代码或则Element UI提供的message组件出了问题,在其他地方绕了些时间。所以这也是在提醒我们排查bug时先注释掉无关代码!!!
js里的this和我想当然的this天差地别,误以为this始终是指向全局的。其实this的指向是动态的,是根据上下文来确定的(参考文章:彻底理解js中this的指向)。
2 正确的写法
经过分析可知,outerFunction()中的this是指向全局的没有问题,而innerFunction中的this并不是指向全局的,其实是指向methods(下面我们就能看到),所以自然不能够访问到$message()方法。我们改写innerFunction()让它能够指向全局:
export default {data() { // ...},methods: {testFunction() {console.log('test');}outerFunction() {this.$message({type: 'success',message: 'outer!'});this.$options.methods.updateHandler(this);},innerFunction(_this) {// 注意_this_this.$message({type: 'success',message: 'inner!'});// 输出testthis.testFunction();}}
}
通过将outerFunction()中的this指针传递给innerFunction()就可以了,非常简单和实用!
3 总结
写js还是不能够用写java的思维模式去写,就像这次一样,觉得自己this的用法完全没有问题,但实则错得彻彻底底,容易掉到坑里去。不过这也是不去先了解语言细节,直接开搞的恶果,导致走很多的弯路,有点难受。
Vue中this的指向问题相关推荐
- JavaScript中的 this指向问题
以下文章均已附上原文链接 ,侵删 文章一:vue中的this指向问题 vue中的this指向问题_JingG459的博客-CSDN博客_vue中this指向问题 最近写项目遇到很多this指向的问题, ...
- 关于在vue中结合数组方法的this的指向问题
最近在项目中遇到一个这样的小问题,在用数组方法结合vue的时候,this的指向不是当前的vue实例,直接看代码 allSelect: function() { var _this = this; ...
- Vue中的methods配置项中的箭头函数this指向及相关源码分析
之前在使用Vue时遇到一个问题,我们知道在Vue的methods中定义函数时,要想使用到Vue实例或者组件实例的this时,我们就不能使用箭头函数定义方法,因为箭头函数中的this是在函数定义时生成的 ...
- 理解Vue中的methods对象方法里的this指向,并解读源码
Vue3的版本 "version": "3.2.20" 阅读区域 618 - 645 解决疑惑 1. methods 对象的 this指向 2. methods ...
- iView UI库解决基于vue.js解决table中this的指向问题
this指向全局变量data的数据 html <i-table ref="tables" editable searchable search-place="top ...
- vue中过滤器filters的this指向问题。
今天在完成一个时间戳转化时想试试vue的过滤器filters,代码如下: execute_time(time) {if (time === 0) return '/'else return this. ...
- vue点击事件中的this指向问题
singlecheck[i].addEventListener("click", ()=>{console.log(this.indexs)if(singlecheck[i] ...
- VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化
问题场景: const addOptions = {singleOrComplex,totalNum: this.smallTotalPrice,selectList: this.purchaseLo ...
- vue中的倒计时跳转页面问题和axios网络请求this作用域问题
一.前言 这两个是在日常开发中碰到的问题,网上都能查得到答案,但是我怕自己会忘记,姑且记录一下用作笔记吧. 二.vue倒计时跳转问题 1.案例 比如我们在一次网络请求结束之后,如果返回结果是成功,则倒 ...
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于"父子组件通信"的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰 ...
最新文章
- 天翼云从业认证(2.2)云计算的模式、应用和行业生态
- 使用SAP OData offline库实现Android应用的离线(offline)模式
- 钉钉微应用怎么进入_蓝凌携手钉钉走进越秀地产,零距离热聊企业数字化转型...
- 动态数据的国际化、几种主要的国际化标签
- 区块链100讲:带你走进EOS的存储系统
- 基于Arduino的蓝牙电子秤
- python压缩HTML文件,python压缩javascript文件代码
- 2021-12-28学习的道路是寂寞的,学成后的成绩是惊艳的。喜欢热闹是生物的本性,耐得住寂寞方显人性尊贵
- python实现分词和词云制作
- 无线网络设置的dns服务器,DNS怎么设置才能上网
- Ceilometer原理及介绍
- 通信协议之IIC协议(eeprom)_通俗易懂篇!
- 学习java的第17天
- Cesium鼠标事件汇总
- 炼钢行业皮带无人化管理的问题及解决
- 门店定位怎么在地图上显示_怎么能让顾客在地图上搜索到自己店的位置?
- 动手实验 CVE-2010-2883 Adobe Reader TTF字体SING表栈溢出漏洞
- Matlab mfcc函数参数详解(英文附例)
- 吴恩达机器学习训练秘籍整理三十三到三十五章(五)
- 读Why We Sleep by Matthew Walker-未完待续……
热门文章
- U盘格式化后容量变小了_内存丢失如何恢复?
- 2019我依旧满腔热血,追寻爱与梦想
- oracle的音标,oracle的意思在线翻译,解释oracle中文英文含义,短语词组,音标读音,词源【澳典网ODict.Net】...
- HTML入门笔记8-上脚注和下脚注标签
- 基于SONY CCD ICX285的成像电路设计
- 使用计算机过程中 你有哪些有效措施防范计算机病毒,计算机病毒防范措施主要有什么...
- python绘图 ——蜡笔小新
- android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec(二)
- “Vidalia tor privoxy”配置自动启动
- Vue Router4路由