7.3.14 SetIntegrityLevel ( O, level )

抽象操作 SetIntegrityLevel 用于修复对象的一组自己的属性。 此抽象操作执行以下步骤:

  1. 断言: Type(O) 为 Object 类型。
  2. 断言:level "sealed" "frozen"
  3. 使 status 变为 ? O.[[PreventExtensions]]()。
  4. 如果 statusfalse,则返回 false
  5. 使 keys 变为 ? O.[[OwnPropertyKeys]]()
  6. 如果 level "sealed" 时,那么

a. 对每个元素 k keys 重复, i. 执行 ? DefinePropertyOrThrow(O, k, PropertyDescriptor{[[Configurable]]: false})。

7.否则 level"frozen" 时,

a.对每个元素 kkeys 重复,

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

results matching ""

    No results matching ""