uniapp [Vue warn]: Error in onLoad hook: “TypeError: Attempting to change the setter of an unconfigu
一般通过为对象的属性赋值的情况下,对象的属性可以修改也可以删除,但是通过Object.defineProperty()定义属性,通过描述符的设置可以进行更精准的控制对象属性。本次的错误,是 configurable 的值被设置成 FALSE 导致的,所以改成 TRUE 即可!注意:当使用了getter或setter方法,不允许使用writable和value这两个属性(如果使用,会直接报错滴)Ob
一、背景
用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, //控制属性是否可以被修改,默认值是false
configurable:true, //控制属性是否可以被删除,默认值是false
set: 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 即可!注意看控制台的错误提示,也许你的是其他情况报错!
更多推荐
所有评论(0)