likes
comments
collection
share

使对象封闭的三种方法

作者站长头像
站长
· 阅读数 15

对象扩展

  • Object.preventExtensions:使对象不可扩展,也就是永远不能再添加新的属性
  • Object.isExtensible:判断一个对象是否是可扩展
const obj = {
  name: "云牧"
}

const newObj = Object.preventExtensions(obj); 

console.log(obj === newObj); // 返回 true,代表是将原对象变的不可扩展,并且返回原对象
// 添加新属性无效
obj.age = 18;
console.log(obj); // { name: '云牧' }

console.log(Object.isExtensible(obj)); // false

对象的封闭

  • Object.seal:阻止添加新属性+属性标记为不可配置(现有属性值可以修改)
  • Object.isSealed:检查一个对象是否被密封
const obj = {
  name: "云牧",
};

Object.seal(obj);
// 添加新属性无效
obj.age = 18;
// 删除属性无效
delete obj.name;
// 修改现有属性有效
obj.name = "黛玉";
console.log(obj); // { name: '云牧' }

console.log(Object.isSealed(obj)); // true

对象的冻结

  • Object.freeze:不加新属性+不可配置+不能修改值
  • Object.isFrozen:检查一个对象是否被冻结
const obj = {
  name: "云牧",
};

Object.freeze(obj);
// 添加新属性无效
obj.age = 18;
// 删除属性无效
delete obj.name;
// 修改现有属性无效
obj.name = "黛玉";
// defineProperty报错
// Object.defineProperty(obj, "name", {
//   value: "林怼怼",
// });
console.log(obj); // { name: '云牧' }

console.log(Object.isFrozen(obj)); // true
转载自:https://juejin.cn/post/7205903144173600826
评论
请登录