面试题039-如果希望const定义的对象的属性也不能被修改该怎么做?

158 阅读1分钟
  1. 方法1

Object.freeze() 方法可以冻结一个对象。被冻结的对象不能被修改;冻结的对象则不能向这个对象添加新的属性,不能删除已有属性。

const obj = {
  prop: 49
};
 
Object.freeze(obj);
 
obj.prop = 33;
 
console.log(obj.prop);//49
  1. 方法2

Object.defineProperty()设置对象属性只读

//语法
Object.defineProperty(obj, prop, descriptor)
//参数
obj 要定义属性的对象。
prop 要定义或修改的属性的名称或Symbol
descriptor 要定义或修改的属性描述符
{
configurable: 当且仅当该属性的 `configurable` 键值为 `true` 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为false
enumerable:当且仅当该属性的 `enumerable` 键值为 `true` 时,该属性才会出现在对象的枚举属性中。默认为false
value:该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)
writable:当且仅当该属性的 `writable` 键值为 `true` 时,属性的值,也就是上面的 `value`,才能被赋值
}