Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重学js —— 基本对象:普通对象(Object构造器上的属性二) #106

Open
lizhongzhen11 opened this issue May 1, 2020 · 0 comments
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN

Comments

@lizhongzhen11
Copy link
Owner

基本对象:普通对象(Object构造器上的属性二)

Object.getOwnPropertyDescriptor ( O, P )

  1. 定义 obj? ToObject(O)
  2. 定义 key? ToPropertyKey(P)
  3. 定义 desc? obj.[[GetOwnProperty]](key)
  4. 返回 FromPropertyDescriptor(desc)

Object.getOwnPropertyDescriptors ( O )

  1. 定义 obj? ToObject(O)
  2. 定义 ownKeys? obj.[[OwnPropertyKeys]]()
  3. 定义 descriptors! OrdinaryObjectCreate(%Object.prototype%)
  4. 按顺序遍历 ownKeys 中每个元素 key
    1. 定义 desc? obj.[[GetOwnProperty]](key)
    2. 定义 descriptor! FromPropertyDescriptor(desc)
    3. 如果 descriptor 不是 undefined,执行 ! CreateDataPropertyOrThrow(descriptors, key, descriptor)
  5. 返回 descriptors

Object.getOwnPropertyNames ( O )

  1. 返回 ? GetOwnPropertyKeys(O, string)

Object.getOwnPropertySymbols ( O )

  1. 返回 ? GetOwnPropertyKeys(O, symbol)

GetOwnPropertyKeys ( O, type )

  1. 定义 obj? ToObject(O)
  2. 定义 keys? obj.[[OwnPropertyKeys]]()
  3. 定义 nameList 为新的空 List
  4. 按顺序遍历 keys 中的每个元素 nextKey
    1. 如果 nextKeySymbol 类型且 typesymbolnextKeyString 类型且 typestring
      1. nameList 尾部添加 nextKey
  5. 返回 CreateArrayFromList(nameList)

Object.getPrototypeOf ( O )

  1. 定义 obj? ToObject(O)
  2. 返回 ? obj.[[GetPrototypeOf]]()

Object.is ( value1, value2 )

  1. 返回 SameValue(value1, value2)

Object.isExtensible ( O )

  1. 如果 O 不是对象,返回 false
  2. 返回 ? IsExtensible(O)

Object.isFrozen ( O )

  1. 如果 O 不是对象,返回 false
  2. 返回 ? TestIntegrityLevel(O, frozen)

Object.isSealed ( O )

  1. 如果 O 不是对象,返回 false
  2. 返回 ? TestIntegrityLevel(O, sealed)

Object.keys ( O )

  1. 定义 obj? ToObject(O)
  2. 定义 nameList? EnumerableOwnPropertyNames(obj, key)
  3. 返回 CreateArrayFromList(nameList)

Object.preventExtensions ( O )

  1. 如果 O 不是对象,返回 O
  2. 定义 status? O.[[PreventExtensions]]()
  3. 如果 statusfalse,抛 TypeError 异常
  4. 返回 O

Object.prototype

  • 初始值为 %Object.prototype%
  • 属性描述符为:{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }

Object.seal ( O )

  1. 如果 O 不是对象,返回 O
  2. 定义 status? SetIntegrityLevel(O, sealed)
  3. 如果 statusfalse,抛 TypeError 异常
  4. 返回 O

Object.setPrototypeOf ( O, proto )

  1. 设置 O? RequireObjectCoercible(O)
  2. 如果 proto 既不是对象又不是 Null,抛 TypeError 异常
  3. 如果 O 不是对象,返回 O
  4. 定义 status? O.[[SetPrototypeOf]](proto)
  5. 如果 statusfalse,抛 TypeError 异常
  6. 返回 O

Object.values ( O )

  1. 定义 obj? ToObject(O)
  2. 定义 nameList? EnumerableOwnPropertyNames(obj, value)
  3. 返回 CreateArrayFromList(nameList)
@lizhongzhen11 lizhongzhen11 added js基础 Good for newcomers 重学js 重学js系列 规范+MDN labels May 1, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN
Projects
None yet
Development

No branches or pull requests

1 participant