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

来源:4-5 非父子组件间的传值

慕勒7399515

2018-04-14

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

写回答

7回答

K丶L

2018-04-19

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
1
charsandrew
我觉得说的很对。
2018-04-20
共1条回复

Dell

2018-05-24

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

0
0

weibo_沙漠海2969813_0

2018-05-23

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
0

Dell

2018-04-21

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

0
0

Dell

2018-04-21

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

0
1
K丶L
其实我感觉用let bus = new Vue()代替原来的Vue.prototype.bus,然后this.bus换为bus比较直观一点,毕竟bus其实只是个观察者,把它作为Vue实例只是为了调用$emit以及$on。
2018-04-21
共1条回复

Han

2018-04-16

同问,请老师解答

0
0

慕仔6385915

2018-04-14

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

0
0

Vue2.5-2.6-3.0开发去哪儿网App 零基础入门到实战

课程紧跟Vue3版本迭代,企业主流版本Vue2+Vue3全掌握

10675 学习 · 8191 问题

查看课程