vue 使用forEach报错,this指向问题

 checkNodes.forEach(function(item, index) {

      const subData = {};

      debugger;

      subData.superDeptId = item.deptId;

      subData.superDeptName = item.deptName;

      console.log(this.bmfcDialog);

      subData.subjectName = this.bmfcDialog.subjectName;

      subData.subjectNum  = this.bmfcDialog.subjectNum;

      this.bmfcDialog.subListData.push(subData); 

     })

 

   ypeError: Cannot read property 'bmfcDialog' of undefined
    at eval (VM59249 onwership_new_new.vue:499)
    at Array.forEach (<anonymous>)
    at VueComponent.getCheckedNodes (onwership_new_new.vue?e977:460)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at VueComponent.invoker (vue.runtime.esm.js?2b0e:2179)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at VueComponent.Vue.$emit (vue.runtime.esm.js?2b0e:3882)
    at VueComponent.handleClick (element-ui.common.js?5c96:9417)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at HTMLButtonElement.invoker (vue.runtime.esm.js?2b0e:2179)

原因:

  每一个用function声明的函数在调用时都会在函数内创建自己的this。this一般是函数所操作的对象。如果没有操作的对象。this在"use strict";严格模式下是 undefined,非严格模式下是 window。
也就是说,function声明的函数总是有自己的this。从而遮盖外层作用域中的this。
如果用es6的箭头函数()=>{}就没有自己的this。在箭头函数()=>{}中访问this,是访问外层作用域中的this

 

改为

 checkNodes.forEach(item => {

        const subData = {}

        subData.superDeptId = item.deptId

        subData.superDeptName = item.deptName

        subData.subjectName = this.bmfcDialog.subjectName

        subData.subjectNum = this.bmfcDialog.subjectNum

        subData.acmeInternalPricePlanId = this.bmfcDialog.acmeInternalPricePlanId

        this.bmfcDialog.subListData.push(subData)

      })

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 当在Vue3页面中使用forEach方法遍历data中定义的数组时,可能会遇到报错的情况。根据引用\[1\]和引用\[2\]的内容,这个问题可能与Vue的属性封装有关。如果数组是通过ref、toRef或导出的假数据定义的,需要在forEach方法中加上.value才能正确遍历数组中的值。例如,对于使用ref定义的数组numberArr,应该使用numberArr.value.forEach来进行遍历。而对于reactive定义的数组,则不需要加上.value就可以进行遍历。另外,需要注意的是,在forEach方法中使用this时,要确保this的指向正确,可以使用箭头函数或在forEach方法外部将this赋值给另一个变量来避免出现undefined的错误。 #### 引用[.reference_title] - *1* *2* [vue3中使用ForEach报错Uncaught TypeError: xxxx.forEach is not a function](https://blog.csdn.net/qq_43799179/article/details/128047328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue 使用forEach报错,this指向问题](https://blog.csdn.net/weixin_42481234/article/details/89306962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值