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 —— Reflect对象 #133

Open
lizhongzhen11 opened this issue Jul 20, 2020 · 0 comments
Open

重学js —— Reflect对象 #133

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

Comments

@lizhongzhen11
Copy link
Owner

Reflection

Reflect对象

  • MDN
  • %Reflect%
  • 全局对象 "Reflect" 属性的初始值
  • 属于 普通对象
  • [[Prototype]] 内置插槽其值为 %Object.prototype%
  • 不是 函数对象
  • 没有 [[Construct]] 内置插槽;不能使用 new
  • 没有 [[Call]] 内置插槽;不能作为函数调用
  • Reflect的所有属性和方法都是静态的(就像Math对象)

即使曾经看完阮一峰老师的《ES6入门》,我也不懂这到底干嘛用的?主要是阮老师给的示例让我懵逼了,对于当时菜鸡的我来说有点看不大懂,而且也没什么太强烈的上进心,毕竟我很懒,加上从没用过,就一直迷迷糊糊得过且过了。。。

Reflect.apply ( target, thisArgument, argumentsList )

  1. 如果 target 不可调用,抛 TypeError 异常
  2. 定义 args? CreateListFromArrayLike(argumentsList)
  3. 执行 PrepareForTailCall()
  4. 返回 ? Call(target, thisArgument, args)

Reflect.construct ( target, argumentsList [ , newTarget ] )

  1. 如果 target 不是构造器,抛 TypeError 异常
  2. 如果 newTarget 不存在,将 newTarget 设为 target
  3. 如果 newTarget 不是构造器,抛 TypeError 异常
  4. 定义 args? CreateListFromArrayLike(argumentsList)
  5. 返回 ? Construct(target, args, newTarget)

Reflect.defineProperty ( target, propertyKey, attributes )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 key? ToPropertyKey(propertyKey)
  3. 定义 desc? ToPropertyDescriptor(attributes)
  4. 返回 ? target.[[DefineOwnProperty]](key, desc)

Reflect.deleteProperty ( target, propertyKey )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 key? ToPropertyKey(propertyKey)
  3. 返回 ? target.[[Delete]](key)

Reflect.get ( target, propertyKey [ , receiver ] )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 key? ToPropertyKey(propertyKey)
  3. 如果 receiver 不存在,
    1. receiver 设为 target
  4. 返回 ? target.[[Get]](key, receiver)

Reflect.getOwnPropertyDescriptor ( target, propertyKey )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 key? ToPropertyKey(propertyKey)
  3. 定义 desc? target.[[GetOwnProperty]](key)
  4. 返回 FromPropertyDescriptor(desc)

Reflect.getPrototypeOf ( target )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 返回 ? target.[[GetPrototypeOf]]()

Reflect.has ( target, propertyKey )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 key? ToPropertyKey(propertyKey)
  3. 返回 ? target.[[HasProperty]](key)

Reflect.isExtensible ( target )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 返回 ? target.[[IsExtensible]]()

Reflect.ownKeys ( target )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 keys? target.[[OwnPropertyKeys]]()
  3. 返回 CreateArrayFromList(keys)

Reflect.preventExtensions ( target )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 返回 ? target.[[PreventExtensions]]()

Reflect.set ( target, propertyKey, V [ , receiver ] )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 定义 key? ToPropertyKey(propertyKey)
  3. 如果 receiver 不存在,
    1. receiver 设为 target
  4. 返回 ? target.[[Set]](key, V, receiver)

Reflect.setPrototypeOf ( target, proto )

  1. 如果 target 不是对象,抛 TypeError 异常
  2. 如果 proto 既不是对象又不是 null,抛 TypeError 异常
  3. 返回 ? target.[[SetPrototypeOf]](proto)
@lizhongzhen11 lizhongzhen11 added js基础 Good for newcomers 重学js 重学js系列 规范+MDN labels Jul 20, 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