请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

var this_ = this 这句不懂,如果不加这句,直接this.content,这个this的作用域难道不是组件全局作用域么??

var this_ = this 这句不懂,如果不加这句,直接this.content,这个this的作用域难道不是组件全局作用域么?? 
或者说,能解释下,this_.content和this.content的作用域分别在哪吧。

正在回答 回答被采纳积分+3

7回答

K丶L 2018-04-19 23:44:00

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) => {})

6 回复 有任何疑惑可以回复我~
  • 我觉得说的很对。
    回复 有任何疑惑可以回复我~ 2018-04-20 23:19:17
Dell 2018-05-24 00:05:49

关于这个问题我不想解释太多,你想学习this,自己打印一下this,然后去看this的文章介绍,网上有的是,这种基础的问题搞不清楚,我觉得不是学不会,是用不用心的问题。

0 回复 有任何疑惑可以回复我~
weibo_沙漠海2969813_0 2018-05-23 23:41:06
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变量传递进去。

0 回复 有任何疑惑可以回复我~
Dell 2018-04-21 11:43:51

能把对应的代码贴上来么,我看着代码来给大家讲解,看来大家js的基础有些欠缺啊

0 回复 有任何疑惑可以回复我~
Dell 2018-04-21 00:20:31

你可以自己先分别打印看一下。然后我们围绕结果讨论

0 回复 有任何疑惑可以回复我~
  • K丶L #1
    其实我感觉用let bus = new Vue()代替原来的Vue.prototype.bus,然后this.bus换为bus比较直观一点,毕竟bus其实只是个观察者,把它作为Vue实例只是为了调用$emit以及$on。
    回复 有任何疑惑可以回复我~ 2018-04-21 00:27:58
Han 2018-04-16 11:20:46

同问,请老师解答

0 回复 有任何疑惑可以回复我~
慕仔6385915 2018-04-14 10:58:36

在匿名函数中的this会指向全局的window对像

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信