Reflect

289 阅读2分钟

静态方法

Reflect 对象一共有 13 个静态方法,以下方法第一个参数不是对象时会报错,而对应的Object方法不会报错

  • Reflect.apply(target, thisArg, args)
  • Reflect.construct(target, args)
  • Reflect.get(target, name, receiver)
  • Reflect.set(target, name, value, receiver)
  • Reflect.defineProperty(target, name, attributes)
  • 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)

Reflect.apply(target, thisArg, args)

该方法用于绑定 this 对象后执行给定函数。

Reflect.construct(target, args)

该方法等同于 new target(...args),用于创建实例。

Reflect.get(target, name, receiver)

该方法查找并返回 target 对象的 name 属性,如果没有 name 属性,则返回 undefined。

如果 name 属性部署了读取函数(getter),getter 函数中的 this 指向 receiver 参数(第三个参数缺省时,this 仍指向 target)。

如果第一个参数不是对象,Reflect.get 方法报错。

var myObject = {
    foo: 1,
    bar: 2,
    get baz() {
        return this.foo + this.bar;
    }
};
var myRecevierObject = {
    foo: 4, 
    bar: 4
}
Reflect.get(myObject, 'baz', myRecevierObject); // 8
Reflect.get(myObject, 'baz'); // 3
Reflect.get(1, 'foo'); // TypeError
Reflect.get(false, 'foo'); // TypeError

Reflect.set(target, name, value, receiver)

该方法设置 target 对象的 name 属性值为 value。

如果 name 属性部署了赋值函数(getter),getter 函数中的 this 指向 receiver 参数(第四个参数缺省时,this 仍指向 target)。

如果第一个参数不是对象,Reflect.set 方法报错。

Reflect.set 会触发 Proxy.defineProperty 拦截。

Reflect.defineProperty(target, name, attributes)

该方法用于为对象定义或修改属性。attributes 为要定义或修改的属性的描述。

Reflect.deleteProperty(obj, name)

该方法等同于 delete obj[name],用于删除对象的属性,返回一个布尔值,true 表示删除成功或者被删除的属性不存在,false 表示删除失败或者被删除的属性依然存在。

Reflect.has(obj, name)

该方法对应 name in obj 中的 in 运算符,判断 name 属性是否为 obj 的属性,是返回 true,不是返回 false。

Reflect.ownKeys(target)

该方法用于获取对象的所有属性。

Reflect.isExtensible(target)

该方法获取对象的可扩展性,返回一个布尔值表示对象是否可扩展。

Reflect.preventExtensions(target)

该方法用于将一个对象变为不可扩展,返回一个布尔值,表示是否操作成功。

Reflect.getOwnPropertyDescriptor(target, name)

该方法用于获取指定属性的描述对象。

Reflect.getPrototypeOf(obj)

该方法用于读取对象的 _proto_ 属性。

Reflect.setPrototypeOf(obj, newProto)

该方法用于设置对象的 _proto_ 属性,返回一个布尔值,表示是否操作成功。