# 12. Reflect
1.静态方法:Reflect对象一共有13个静态方法。
Reflect.apply(target,thisArg,args)
Reflect.construct(target,args):Reflect.construct方法等同于new target(...args),这提供了一种不使用new,来调用构造函数的方法。
Reflect.get(target,name,receiver)
Reflect.set(target,name,value,receiver):第一个参数不是对象,Reflect.set会报错。Reflect.set会触发Proxy.defineProperty拦截。
Reflect.defineProperty(target,name,desc):用来为对象定义属性。
Reflect.deleteProperty(target,name)
Reflect.has(target,name)
Reflect.ownKeys(target):用于返回对象的所有属性,基本等同于Object.getOwnPropertyNames与Object.getOwnPropertySymbols之和。
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target):用于读取对象的__proto__属性,对应Object.getPrototypeOf(obj)。区别是,如果参数不是对象,Object.getPrototypeOf会将这个参数转为对象,然后再运行,而Reflect.getPrototypeOf会报错。
Reflect.setPrototypeOf(target, prototype):用于设置对象的__proto__属性,返回第一个参数对象,对应Object.setPrototypeOf(obj, newProto)。