uniapp [Vue warn]: Error in onLoad hook: “TypeError: Attempting to change the setter of an unconfigu
一、背景
用uniapp开发微信小程序时候发现报这个错误,记录下我是如何解决的!
二、报错信息
uniapp [Vue warn]: Error in onLoad hook: "TypeError: Attempting to change the setter of an unconfigurable property."
三、错误原因
由于在Object.defineproperty方法中,控制属性不可以被删除,unconfigurable 状态。
四、错误分析
我们来看下Object.defineproperty方法的具体使用:
Object.defineproperty 的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
Object.defineproperty 参数
Object.defineproperty方法需要传递3个参数
Object.defineproperty(obj, prop, desc )
参数1:obj 需要定义属性的当前对象
参数2:prop 当前需要定义的属性名
参数3:desc 描述符 一般是一个对象
一般通过为对象的属性赋值的情况下,对象的属性可以修改也可以删除,但是通过Object.defineProperty()定义属性,通过描述符的设置可以进行更精准的控制对象属性。
Object.defineProperty(obj, variate, {enumerable:true, //控制属性是否可以枚举,默认值是false//writable:true, //控制属性是否可以被修改,默认值是falseconfigurable:true, //控制属性是否可以被删除,默认值是falseset: function (value) {console.log('global set value!');val = value; // 重新赋值const data = {};data[variate] = value;console.log('page set value!');page.setData(data);},get: function () {console.log('global get value!');// 在其他界面调用getApp().globalData.variate的时候,这里就会执行。return val; // 返回当前值}});
最后还有最重要的两个属性 set和get(即存取器描述:定义属性如何被存取),这两个属性是做什么用的呢?
注意:当使用了getter或setter方法,不允许使用writable和value这两个属性(如果使用,会直接报错滴)
五、解决办法
本次的错误,是 configurable 的值被设置成 FALSE 导致的,所以改成 TRUE 即可!注意看控制台的错误提示,也许你的是其他情况报错!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
