13Reflect

作者: 我_巨可爱 | 来源:发表于2017-10-30 17:01 被阅读0次

概述

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

有以下特征

  1. Object对象上明显属于语言内部的方法,放到Reflect对象上
  2. 修改某些返回结果,更加合理
  • Object.defineProperty(obj,name,desc)当无法定义属性时报错
  • Reflect.defineProperty(obj,name,des)当无法定义属性时返回false
  1. Object 的操作都变成函数
  • name in obj 转变成 Reflect.has(obj,name)
  • delete obj[name] 转变成 Reflect.deleteProperty(obj,name)
  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)

相关文章

  • 13Reflect

    概述 Reflect 对象是为了操作对象而提供的新API 有以下特征 将Object对象上明显属于语言内部的方法,...

网友评论

      本文标题:13Reflect

      本文链接:https://www.haomeiwen.com/subject/ducmpxtx.html