解决JavaScript Uncaught (in promise) TypeError: Cannot redefine property: _desc

先献上报错的代码

Object.defineProperty(this.props.labelInfo, '_desc', {
  get: () => {
    return this.props.labelInfo.desc
  },
  set: value => {
    this.props.labelInfo.desc = value
    this.setProperty('desc')
  }
})

反正就是因为业务需求需要对this.props.labelInfo的_desc属性赋值的时候,同步更新其desc属性。代码运行后首次加载就失败,打开控制台看到以下报错信息:

Uncaught (in promise) TypeError: Cannot redefine property: _desc

我开始在网上寻找解决方法,意外发现stackoverflow上已经有解决的方案,虽然不是我的问题所在,但是先把代码贴出来以防后续出现这个情况吧

建议将

object.rotation = object2.rotation
object.rotation = new THREE.Euler( 1, 0, 0 );

写成

object.rotation.copy( object2.rotation );
object.rotation.set( 1, 0, 0 )

其实我的真实问题是,this.props.labelInfo._desc并不存在,所以我需要在定义对象的时候对该字段进行赋值

// 错误代码部分
this.props = {
      id: uuid(),
      labelInfo
      ...
    }

// 正确代码
this.props = {
      id: uuid(),
      labelInfo: {
        _desc: '',
        ...labelInfo
      },
      ...
   }

在长期写JavaScript的过程中因为JavaScript是弱类型语言,很多时候就算不提前定义也不会影响到代码问题,所以很多时候自己就放松了警惕,同级在操作对象时,就算对象内不存在的属性也没有太多关系,但是这次是对不存在的属性进行属性级别的编辑,总而言之就是自己活该!不过这个报错信息也给我在debug的方向上有很大的误导作用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容