Table of Contents:
  1. 申明
    1. Proxy
      1. Reflect
        1. 支持的操作(Proxy和Reflect都存在)

          ES6学习笔记4(Proxy、Reflect)

          Reading Time:The full text has 471 words, estimated reading time: 3 minutes
          Creation Date:2017-07-04
          Article Tags:
          Previous Article:Oracle数据类型
           
          BEGIN

          申明

          阮一峰老师的ECMAScript 6学习笔记。

          Proxy和Reflect都是ES6新加的对象, Proxy对象用于拦截对象的默认属性, 而Reflect对象则用作方法仓库, 将其它数据结构绑定的工具函数移到这个方法下面, Reflect的方法属性与Proxy对象的方法属性一一对应.

          Proxy

          修改某些操作的默认行为。
          Proxy的初始化方式(其实就是第二个对象参数里面的对象方法替代第一个对象参数里面相同名称的默认方法,以达到默认方法拦截的作用):

          var proxy = new Proxy({}, {
          	get(tar, pro){},
          	set(tar, pro){},
          	......
          });

          Reflect

          返回布尔值成功还是失败, 替代原有的报错, 使使用更安全, 更健硕.
          如原有的'key' in Object替换为Reflect.has(Object, 'key').
          原有的delete obj['key']替换为Reflect.deleteProperty(obj, 'key').

          支持的操作(Proxy和Reflect都存在)

          1. get(target, propKey, receiver): 对象属性的提取。
          2. set(target, propKey, value, receiver): 对象属性的设置,返回布尔值。
          3. has(target, propKey): 对象判断属性是否存在,返回布尔值。
          4. deleteProperty(target, propKey): 对象删除属性,返回布尔值。
          5. ownKeys(target): 目标对象所有自身的属性的属性名,返回数组, 等同于Object.getOwnPropertyNamesObject.getOwnPropertySymbols的并集。
          6. getOwnPropertyDescriptor(target, propKey): 返回指定属性的描述对象, 等同于Object.getOwnPropertyDescriptor
          7. defineProperty(target, propKey, propDesc): 为对象添加属性, 等同于Object.defineProperty, 返回布尔值。
          8. preventExtensions(target): 将对象变为不可拓展的, 对应于Object.preventExtensions, 返回布尔值。
          9. getPrototypeOf(target): 返回对象的__proto__属性, 对应于Object.getPrototypeOf
          10. isExtensible(target): 返回布尔值, 表示当前对象是否可扩展, 对应于Object.isExtensible
          11. setPrototypeOf(target): 用于设置对象的__proto__属性, 返回第一个参数对象。
          12. apply(target, object, args): 函数调用的操作,比如proxy(...args)proxy.call(object, ...args)proxy.apply(...)
          13. construct(target, args): 对应于new target(...args)
          function Haha(data){
              this.data = data;
          }
          let haha = new Haha('hello');
          // 上下两种实例化方式等价
          let haha = Reflect.construct(Haha, ['hello'])
          FINISH
          Previous Article:Oracle数据类型

          Random Articles
          Life Countdown
          default