由于多层函数嵌套引起的this指向问题

文章讲述了在使用uniapp开发小程序时,上传头像时遇到的问题,主要原因是嵌套函数中this的丢失。文章提供了两种解决方案:一是使用`that`控制this指向,二是利用ES6的箭头函数保持this的外部作用域。作者花费大量时间找到并解决了这个问题。
摘要由CSDN通过智能技术生成

问题背景简介

写小程序上传头像时,

首先,通过点击事件绑定showActionSheet()方法显示更换头像的弹框,同时使用了uniapp的api   

uni.chooseImage(从本地相册选择图片或使用相机拍照。)

由于在给后端传图片时需要转换为base64格式,因此在里面还要调用函数pathToBase64

由于以上的层层嵌套导致,虽然uni.request接口调用成功,但是转换失败,因为现在this.urlPaths已经找不到了(undefined)

问题原因

以上bug出现的原因就是由于

嵌套函数中的this不会从外层函数中继承

例子

举一个简单的栗子

var myObj = {
  myName: "jiale", 
  showThis: function(){
    console.log(this.myName); // 输出啥?
    function bar(){
      console.log(this.myName); // 输出啥?
    }
    bar();
  },
};
myObj.showThis();

答案是:

  1. jiale

  2. undefined

解决方案

方案一

通过that控制this指向

var myObj = {
  myName: "jiale", 
  showThis: function(){
    console.log(this.myName); // 输出啥?
    let that = this;
    function bar(){
      console.log(that.myName); // 输出啥?
    }
    bar();
  },
};
myObj.showThis();

这样就都输出jiale了

方案二

通过ES6的箭头函数

var myObj = {
  myName: "jiale", 
  showThis: function(){
    console.log(this.myName); // 输出啥?
    const bar = () => {
      console.log(this.myName); // 输出啥?
    }
    bar();
  },
};
myObj.showThis();

这样也就都输出jiale了

这是因为箭头函数中的 this 取决于它的外部函数,即谁调用它 this 就继承自谁。

针对该问题的解决

通过方案一的方法,成功解决。

寻寻觅觅花了差不多有3个小时,然后收集资料,写文章用了2个小时,但是很值得!!下次遇到此类问题我绝对秒杀!!差不多600秒就可以!!

芜湖!!!成功解决!!!也祝大家好运都可以顺利解决

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值