Reflect
ES6中将Object的一些明显属于语言内部的方法移植到了Reflect对象上。
Reflect
不是函数对象,所以不可构造(不可以用new
运算符)。
也不能将Reflect
对象作为一个函数来调用(Reflect()
)。
Reflect的所有成员都是静态的(类似于Math
对象)。
Reflect对象提供以下13个静态函数,他们具有与处理器对象handler的方法相同的名称(一一对应)。
这些方法中的一些与Object上的方法相同。
Object的方法参数为object,而Reflect的方法参数为target- ,表示操作目标。
Reflect.getPrototypeOf(target) 获取target的原型
Reflect.setPrototypeOf(target, prototype) 设置target的原型
Reflect.isExtensible(target) target是否可扩展
Reflect.preventExtensions(target) 阻止target的扩展性
Reflect.getOwnPropertyDescriptor(target, prop) 获取target的属性prop的描述器
Reflect.defineProperty(target, property, descriptor) 修改target的属性property为descriptor值
Reflect.has(target, prop) target是否有属性prop
Reflect.get(target, property, receiver) 读属性
Reflect.set(target, property, value, receiver) 写属性
Reflect.deleteProperty(target, property) 删除target的属性property
Reflect.ownKeys(target) 返回包含所有自身属性(继承的不算)的数组
Reflect.apply(target, thisArg, argumentsList) 对函数target进行调用操作,可传入thisArg可数组作为调用时的参数。
Reflect.construct(target, argumentsList, newTarget) 对构造函数进行new操作,即实例化。
和 Object 中等价的 Reflect 反射方法同时也提供了更有意义的返回值。比如,Reflect.defineProperty方法返回一个布尔值,表示属性是否被成功定义;而对应的Object.defineProperty
则返回其首个参数中接收到的对象 -- 这并不是很有