7.3.14 SetIntegrityLevel ( O, level )
抽象操作 SetIntegrityLevel 用于修复对象的一组自己的属性。 此抽象操作执行以下步骤:
- 断言: Type(O) 为 Object 类型。
- 断言:level 为 "sealed" 或 "frozen"。
- 使 status 变为 ? O.[[PreventExtensions]]()。
- 如果 status 为 false,则返回 false。
- 使 keys 变为 ? O.[[OwnPropertyKeys]]()
- 如果 level 为 "sealed" 时,那么
a. 对每个元素 k 的 keys 重复, i. 执行 ? DefinePropertyOrThrow(O, k, PropertyDescriptor{[[Configurable]]: false})。
7.否则 level 为 "frozen" 时,
a.对每个元素 k 的 keys 重复,
i. 使 currentDesc 变为 ? O.[[GetOwnProperty]](k)。
ii. 如果 currentDesc 不为 undefined,那么
1.如果 IsAccessorDescriptor(currentDesc) 为 true,
a. 使 desc 变为 PropertyDescriptor{[[Configurable]]: false}。
2.否则
a. 使 desc 变为 PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }。
3.执行 ? DefinePropertyOrThrow(O, k, desc)。
8.返回 true。