采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
var this_ = this 这句不懂,如果不加这句,直接this.content,这个this的作用域难道不是组件全局作用域么?? 或者说,能解释下,this_.content和this.content的作用域分别在哪吧。
this.bus.$on('change', callback)这句代码改变了this指向,this的绑定主要有四种情况:默认、隐式、显式、new。而这种情况是this.bus调用了callback函数,对象调用方法属于隐式绑定,按照隐式绑定的规则,callback中this的指向调用它的对象,即this.bus这个vue实例。
尝试输出两个this,你可以发现其实这两个this都指向Vue实例,但是又是不同的Vue实例。
callback中的this指向原来this指向的Vue实例中的bus属性,而bus属性又是一个Vue实例,所以会导致这种现象。
为了避免this指向混乱,可以使用es6中的箭头函数
this.bus.$on('change',(msg) => {})
我觉得说的很对。
关于这个问题我不想解释太多,你想学习this,自己打印一下this,然后去看this的文章介绍,网上有的是,这种基础的问题搞不清楚,我觉得不是学不会,是用不用心的问题。
mounted: function() { var _this = this; this.bus.$on('change',function(msg) { _this.selfContent = msg; }) }
this.bus 指向的是新的new Vue()实例,所以this.bus.$on回调函数里面的this会指向这个新的Vue实例,而非原Vue实例。
因此,this.bus回调函数里面想用原Vue实例,只能通过_this变量传递进去。
能把对应的代码贴上来么,我看着代码来给大家讲解,看来大家js的基础有些欠缺啊
你可以自己先分别打印看一下。然后我们围绕结果讨论
其实我感觉用let bus = new Vue()代替原来的Vue.prototype.bus,然后this.bus换为bus比较直观一点,毕竟bus其实只是个观察者,把它作为Vue实例只是为了调用$emit以及$on。
同问,请老师解答
在匿名函数中的this会指向全局的window对像
登录后可查看更多问答,登录/注册
课程紧跟Vue3版本迭代,企业主流版本Vue2+Vue3全掌握
1.8k 20
1.6k 19
2.7k 17
1.3k 16
1.6k 15