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

es6 解构赋值 使用方法的时候,会导致丢失this

es6 解构赋值 使用方法的时候,会导致丢失this

月关宝盒 2019-03-20 17:19:37
今天在使用es6 解构赋值 引入方法的时候,发现在方法里获取不到this,具体详情我贴图吧先贴代码:    /*mainVM文件里的方法*/    @observable planDetailList = [];    @action    ajaxPlanDetailList(id,callback){        Helper.ajax(Api.planList+'/'+id,{            method:'GET'        }).then(res => {            console.log(this);        })    }    /*在componentDidMount时调用mainVM里的方法*/    componentDidMount() {        const { ajaxPlanDetailList } = this.props.mainVM;        ajaxPlanDetailList(this.props.id);    }会显示以下错误换一种方式,直接调用mainVM里的方法,    componentDidMount() {        this.props.mainVM.ajaxPlanDetailList(this.props.id);    }拿到了this不是很懂其中的缘由,请大神详解,跪谢
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

两种思路
1 把ajaxPlanDetailList写成箭头函数
2 ajaxPlanDetailList绑定一下this 类似 ajaxPlanDetailList.bind(this)

查看完整回答
反对 回复 2019-03-28
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

你不解构赋值也会丢失,this上下文是谁调用它就是谁的,比如obj.ajaxPlanDetailList(),那this就是obj,你直接ajaxPlanDetailList()的话this就是全局对象window。


function fun() {

  console.log(this.a);

}


let obj1 = {

  a: 1,

  fun: fun

};


let obj2 = {

  a: 2,

  fun: fun

};


let a = 3;


obj1.fun();  // 1

obj2.fun();  // 2

fun();  // 3


查看完整回答
反对 回复 2019-03-28
  • 3 回答
  • 0 关注
  • 1110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信