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

今天在使用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);

    }

会显示以下错误

https://img4.mukewang.com/5c9c24d90001d7ec08000099.jpg

换一种方式,直接调用mainVM里的方法,


    componentDidMount() {

        this.props.mainVM.ajaxPlanDetailList(this.props.id);

    }

https://img.mukewang.com/5c9c24e40001f7d108000107.jpg

拿到了this

不是很懂其中的缘由,请大神详解,跪谢


月关宝盒
浏览 1111回答 3
3回答

拉风的咖菲猫

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

慕勒3428872

你不解构赋值也会丢失,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();  // 1obj2.fun();  // 2fun();  // 3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript