javascript - object is not extensible 错误在vuejs

标签 javascript vue.js vuex

我想用名为 colspan 的新字段更新促销对象。但是我倒霉的是得到

错误:

未捕获( promise )TypeError:无法添加属性 colspan,对象不可扩展 在评估(评估在(http://localhost:8080/app.js:3160:1),:71:32) 在 Array.forEach( native ) 在评估(评估在(http://localhost:8080/app.js:3160:1),:66:35) 在 Array.forEach( native ) 在评估(评估在(http://localhost:8080/app.js:3160:1),:64:47) 在 Array.forEach( native ) 在评估(评估在(http://localhost:8080/app.js:3160:1),:62:23) 在 promise () 在 F(评估在(http://localhost:8080/app.js:865:1),:35:28) 在 Object.modifyData(在(http://localhost:8080/app.js:3160:1)评估,:48:12)

departmentIds.forEach(departmentId => {
          results[departmentId] = []
          departmentWiseResults[departmentId].forEach((promo, index) => {
            let tmpPromo = promo
            dateRanges.dateRanges.forEach(range => {
              let startedDateWeek = moment(promo.startDate).week()
              let endDateWeek = moment(promo.endDate).week()
              let startedYear = moment(promo.startDate).year()
              let endedYear = moment(promo.endDate).year()
              tmpPromo.colspan = 0
              if (range.startYear === startedYear && range.endYear === endedYear && range.weekNumber <= endDateWeek && range.weekNumber >= startedDateWeek) {
                tmpPromo.colspan++
              }
              departmentWiseResults[departmentId].splice(index, 1, tmpPromo)
              console.log('stareted:', startedDateWeek, endDateWeek, startedYear, endedYear, promo, tmpPromo, departmentWiseResults[departmentId])
            })
            console.log('promo after adding colspna:', promo)
            // if (isInRange(range, promo)) {
            //   console.log('for range', range.startDate, range.endDate)
            //   console.log('for promo', promo.id)
            //   console.log(
            //     'diff is',
            //     findWeekspan(range, dateRanges.dateRanges[dateRanges.dateRanges.length - 1], promo)
            //   )
            // // if (!promo.used) {
            // //   promo.used = true
            // //   results[departmentId]
            // // }
            // }
          })
        })

请帮我解决这个问题。

最佳答案

对象 promo 已通过 Object.preventExtensions 关闭了可扩展性(或 seal or freeze )。这意味着您不能向其添加新属性。相反,您可以使用新属性制作它的新副本。一个方便的方法是使用 Object.assign .

let tmpPromo = Object.assign({colspan: 0}, promo);

这从定义 colspan 的匿名对象开始,将属性从 promo 复制到其中,然后返回对象(我们分配给 tmpPromo).

关于javascript - object is not extensible 错误在vuejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43917561/

相关文章:

vue.js - 将route.params.id传递给vuex操作

vue.js - 如何在 vue-test-utils 中获取按钮文本

vue.js - Vue - 将 v-for 中具有相同键名的父数据传递给子组件

view - VueJS : Vuex doesn't update View after modifying State

javascript - 有没有办法覆盖输入类型数字的递增/递减处理?

javascript - 在 asp.net 中的页面加载事件之前从 Javascript 获取值

javascript - d3 : how can I load external CSV file into data?

javascript - 如何使用 jqueryui 仅在其右侧调整左侧 div 的大小,以及仅在其左侧调整相邻的右侧 div 的大小?

javascript - 当所有代码都在一个脚本标记中时,为什么该脚本不会执行?

javascript - 如何在Vuex中导出模块