为了账号安全,请及时绑定邮箱和手机立即绑定

为啥$http.里面的this要重新指定呢,我再$http里面打印this,跟在外面打印this结果是一样的呀。

为啥$http.里面的this要重新指定呢,我再$http里面打印this,跟在外面打印this结果是一样的呀。

正在回答

4 回答

你写成vm也是正确的,代表渲染整个app里面的内容,这里的this指向也是指向new Vue

0 回复 有任何疑惑可以回复我~

因为$http是异步的,所以取不到外面的vm,参考js里this的四种指向问题,像点击事件内部的this,定时器内部this都是取不到外面的this值的

1 回复 有任何疑惑可以回复我~

可以参考下面的例子:

		/*5*/
		"use strict";
		var xiaoming={
			name:"xiaoming",
			birth:2007,
			age:function(){
				function getAge(){
					var y=new Date().getFullYear();
				    return y-this.birth;
				}
				return getAge();
			}
		};
		xiaoming.age();//es6.html:426 Uncaught TypeError: Cannot read property 'birth' of undefined
		console.log(xiaoming.age());//在非strict模式下:NaN

		//这是因为this指针只在age方法的函数内指向xiaoming,在函数内部定义的函数又指向undefined(在非strict模式下,它重新指向全局对象window!)。

		/*6*/
	   //修复方法:用一个that变量首先捕获this。

	    "use strict";
		var xiaoming={
			name:"xiaoming",
			birth:2007,
			age:function(){
				var that=this;//一开始就捕获this,可以放心地在其他方法内部定义其他函数,而不是吧所有的语句都写在同一个方法中。
				function getAge(){
					var y=new Date().getFullYear();
				    return y-that.birth;
				}
				return getAge();
			}
		};
		// xiaoming.age();
		console.log(xiaoming.age());//10


0 回复 有任何疑惑可以回复我~

因为作用域的问题,有时候指向会不同。具体是否重新指定要看情况来定

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
使用vue2.0实现购物车和地址选配功能
  • 参与学习       96865    人
  • 解答问题       446    个

本视频教程结合案例完整贯穿各个知识点,轻松玩转vue2.0框架

进入课程

为啥$http.里面的this要重新指定呢,我再$http里面打印this,跟在外面打印this结果是一样的呀。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信