13Reflect

2017-10-30  本文已影响0人  我_巨可爱

概述

Reflect 对象是为了操作对象而提供的新API

有以下特征

  1. Object对象上明显属于语言内部的方法,放到Reflect对象上
  2. 修改某些返回结果,更加合理
  1. Object 的操作都变成函数
  1. Reflect 对象的方法和 Proxy 上意义对应,不管 Proxy 怎么修改默认行为,总可以在 Reflect 上获取默认行为
// 获取默认行为
var myObj = {
    foo: 1,
    // 默认行为
    set bar (value) {
        return this.foo = value;
    }
}

var proxy = new Proxy(myObj,{
    // 修改默认行为
    set: function (target,key,value,receiver) {
        return target.foo = value + 1;
    }
});
// set
proxy.foo = 5;  // 使用代理上的方法,myObj 上属性进行相应的改变
Reflect.set(myObj,foo,5); // 使用对象上的set方法
console.log(myObj.foo);

基础案例

receiver 方法一般指的是该方法内的this指向

var myObject = {
    foo: 4,
    set bar(value) {
        return this.foo = value;
    }
};
var myReceiverObject = {
    foo: 0
}
Reflect.set(myObject,'bar',1,myReceiverObject);
myObject.foo //4
myReceiverObject.foo //1

各种方法

  1. Reflect.apply(target,thisArg,args)
  2. Reflect.construct(target,args)
  3. Reflect.get(target,name,receiver)
  4. Reflect.set(target,name,value,receiver)
  5. Reflect.defineProperty(target,name,desc)
  6. Reflect.deleteProperty(target,name)
  7. Reflect.has(target,name)
  8. Reflect.ownKeys(target)
  9. Reflect.isExtensible(target)
  10. Reflect.preventExtensions(target)
  11. Reflect.getOwnPropertyDescriptor(target, name)
  12. Reflect.getPrototypeOf(target)
  13. Reflect.setPrototypeOf(target, prototype)
上一篇下一篇

猜你喜欢

热点阅读