# Reflect
Reflect 对象提供了一系列拦截 JavaScript 的方法,与 proxy handlers 的方法相同。
# 方法
# Reflect.apply(target, thisArgument, argumentsList)
在指定调用方法,指定调用作用域,指定参数的前提下调用方法
console.log(Reflect.apply(Math.floor, undefined, [1.75]));
// expected output: 1
1
2
2
# Reflect.construct(target, argumentsList[, newTarget])
以 argumentsList 为参数,调用 target 构造函数,创建一个 target 的实例。
如果指定了 newTarget,则新创建对象的原型对象为 newTarget.prototype
function Foo() {}
function Bar() {}
var foo = Reflect.construct(Foo, [], Bar);
Object.getPrototypeOf(foo) === Bar.prototype; // true
// 等效于
var foo = Object.create(Bar.prototype)
Foo.apply(foo, args);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
不同的是:
使用Object.create()
创建对象,在构造函数内部new.target
会指向undefined
。
使用Reflect.construct()
创建对象,在构造函数内部new.target
会指向 target 或者 newTarget
# Reflect.defineProperty(target, propertyKey, attributes)
功能和Object.defineProperty()
相似,如果属性被成功定义,返回true
,否则返回false
# Reflect.deleteProperty(target, propertyKey)
删除对象属性,删除成功返回true
,否则返回false
# Reflect.get(target, key)
相当于target[key]
# Reflect.getOwnPropertyDescriptor(target, key)
获取对象属性描述符
# Reflect.getPrototypeOf(target)
获取对象的原型对象
# Reflect.has(target, key)
和in
运算符相同,判断对象是否含有 key 属性
# Reflect.isExtensible(target)
和Object.isExtensible()
相同
# Reflect.ownKeys(target)
返回自身所有属性组成的数组
# Reflect.preventExtensibles(target)
阻止对象添加属性
# Reflect.set(target, key, value)
设置对象属性的值,成功返回true
,否则返回false
# Reflect.setPrototypeOf(target, newTarget)
给对象设置新原型对象
← AsyncFunction Proxy →