Reflect

作者: 木中木 | 来源:发表于2017-12-04 20:27 被阅读0次

reflect设计的原则如下两点:
(1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上。也就是说,从Reflect对象上可以拿到语言内部的方法。

(2) 修改某些Object方法的返回结果,让其变得更合理。比如,Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)则会返回false。

// 老写法
try {
  Object.defineProperty(target, property, attributes);
  // success
} catch (e) {
  // failure
}

// 新写法
if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure
}

从函数层面上操作

console.log('assign' in Object);
console.log(Reflect.has(Object ,'assign'))
```
Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。这就让Proxy对象可以方便地调用对应的Reflect方法,完成默认行为,作为修改行为的基础。也就是说,不管Proxy怎么修改默认行为,你总可以在Reflect上获取默认行为。
```
Proxy(target, {
  set: function(target, name, value, receiver) {
    var success = Reflect.set(target,name, value, receiver);
    if (success) {
      log('property ' + name + ' on ' + target + ' set to ' + value);
    }
    return success;
  }
});
```
API
Reflect对象一共有13个静态方法。这些方法是跟proxy对应的。

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)













相关文章

  • ES6(十二)—— Reflect

    Reflect 反射,什么是反射机制? Reflect简介 为什么要用Reflect? Reflect API.a...

  • Reflect反射与代理Proxy

    先看看Reflect有多少属性方法 所以Reflect.set()与Reflect.get()相反 Reflect...

  • golang-reflect

    reflect 示例0 reflect示例1 reflect 示例2 通过反射修改对象属性 reflect 示例3...

  • Go语言学习笔记-反射和Unsafe

    reflect.TypeOf vs reflect.ValueOf reflect.TypeOf 返回类型(ref...

  • 反射

    什么是反射? 为何需要检查变量,确定变量的类型? reflect 包reflect.Type 和 reflect....

  • 反射的用法

    什么是反射? 为何需要检查变量,确定变量的类型? reflect 包reflect.Type 和 reflect....

  • 反射

    反射初识 reflect对象获取接口变量信息 reflect对象设置实际变量的值 reflect对象进行方法的调用

  • CSS3之box-reflect制作倒影

    box-reflect box-reflect:none | ?

  • 反射的实现原理

    反射的demopackage com.java.reflect;import java.lang.reflect....

  • Go奇技淫巧

    string的本质:reflect.StringHeader{}slice的本质:reflect.SliceHea...

网友评论

      本文标题:Reflect

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