一个被封印的对象,是不可扩展,且其属性都是不可配置的,以为着
使用 Object.seal()
方法来封印对象,对象的 [[Extensible]]
及其属性的 [[Configurable]]
都会被置为 false
使用 Object.isSealed()
判断对象是否被封印
const anObject = {
name: 'object',
};
console.log(Object.isExtensible(anObject)); // true
console.log(Object.isSealed(anObject)); // false
// 开始封印
Object.seal(anObject);
console.log(Object.isExtensible(anObject)); // false
console.log(Object.isSealed(anObject)); // true
const descriptor = Object.getOwnPropertyDescriptor(anObject, "name");
console.log(descriptor.configurable); // false, 封印后的对象,属性不可配置
// 动态添加一个属性
anObject.sayName = function () {
console.log(this.name);
};
console.log("sayName" in anObject); // false, 封印后无法动态添加新属性
// 删除一个属性
delete anObject.name
console.log("name" in anObject); // true, 封印后,对象的属性删不掉
// 读写属性值
anObject.name = "object2";
console.log(anObject.name); // object2, 封印后的对象可以读写属性值
JavaScript 封印后的对象,与 C++, Java 的类创建出来的对象类似