平时我们在js中声明一个对象,他是可以随意赋值的如const a = {name:"zs"}=> a = {name:"ls"},这本身是没有问题的,但是当我们有一个源数据并且不想它被修改,这种情况应该怎么办呢?这就需要使用属性描述符来处理这个问题。
我们可以通过Object.getOwnPropertyDescriptors(data)与Object.getOwnPropertyDescriptor(data,“key”)来对象所有数据的描述符和获取单个数据的描述符,它们会返回以下属性:
value该属性的值(仅针对数据属性描述符有效)writable当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效) 设置读写configurable当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。enumerable当且仅当指定对象的属性可以被枚举出时,为 true。
有了上述属性后我们就可以通过Object.defineProperty()来修改属性描述符。
const data = { name: "张三", age: 5 };
Object.defineProperty(data, "age", {
get() {
//读取器 getter
return 1;
},
set(value) {
//设置器 setter
throw new Error("不可以给该属性赋值");
},
});