Reflect对象的方法清单如下, 共 13 个。
Reflect.apply(target, thisArg, args)
Reflect.construct(target, args)
Reflect.get(target, name, receiver)
Reflect.set(target, name, value, receiver)
Reflect.defineProperty(target, name, desc)
Reflect.deleteProperty(target, name)
Reflect.has(target, name)
Reflect.ownKeys(target)
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
上面这些方法的作用, 大部分与Object对象的同名方法的作用都是相同的, 而且它与Proxy对象的方法是一一对应的。 下面是对其中几个方法的解释。
( 1) Reflect.get(target, name, receiver)
查找并返回target对象的name属性, 如果没有该属性, 则返回undefined。
如果name属性部署了读取函数, 则读取函数的 this 绑定receiver。
var obj = {
get foo() {
return this.bar();
},
bar: function() {
...
}
};
// 下面语句会让 this.bar()
// 变成调用 wrapper.bar()
Reflect.get(obj, "foo", wrapper);
(2) Reflect.set(target, name, value, receiver)
// 失败时抛出错误
Object.defineProperty(obj, name, desc);
// 失败时返回 false
Reflect.defineProperty(obj, name, desc);
上面代码中, Reflect.defineProperty方法的作用与Object.defineProperty是一样的, 都是为对象定义一个属性。 但是, Reflect.defineProperty方法失败时, 不会抛出错误, 只会返回false。