javascript 中的自动化—元编程(中)

继续分享在 javascript 中是如何实现元编程,我们先介绍一下在 js 中的代理以及代理模式是什么,Proxy 从名字上看显而易见,就是对真实对象进行代理,为了是隐藏真实对象,且提供统一接口。大家记住这个就行,以后在设计模式中会为大家详细讲解,在元编程中的代理的目的是—提供统一接口。

代理模式

第一参数为要代理的对象,通过 new 创建的 proxy 对象是代理什么对象或类型,可以代理以下类型的对象,提醒他们都是 object 类型。

proxy 对象创建方式

代理创建对象与其代理对象类型保持一致。

这里处理函数,其实就是复写一些对象一些基本方法,代理也就是在原有对象上再套上一层,为其原有的方法添加新特性。

有关 handler(处理方法)是通过代码给大家解释一下,我们通过 hanlder 复写对象原有的 get 方法,如果属性在对象中不存,我们在获取时就会返回 37 ,代码很简单也很明了,就不进行过多解释了,也便于大家理解 handler 的用途。

这是代理可以复写的方法,在元编程中的代理一般不单独使用,他会与下面介绍的 Reflect 对象一起共同完成对元编程的实现。所以他们俩的方法也是一一对应的。因为代理一个对象后,我们复写了原有方法,还需要用 Reflect 来调用原有的方法。

反射方法

介绍 Reflect API 

Reflect 不是构造函数, 要使用的时候,直接通过 Reflect.method() 来调用, Reflect 有的方法和 Proxy 差不多, 而且多数 Reflect 方法原生的 Object 已经重新实现了。

反射
反射
代理和反射对应图

*这里给大家提一下 revoke 方法,如果执行这个 revoke 方法就会销毁对象属性。

get 方法

实战以动态校验为例来进行讲解。

示例

来看一看,动态校验是如何实现的,在运行时当我们为对象赋值时,进行动态地校验,代码很清晰,估计大家一看就明白逻辑,这也就是会说话的代码。

检验函数

这里如果有传入 validations 回调函数,就使用传入的回调函数,如果没有就用默认 ()=>true。validations 是一个校验对象,根据传入 key 来调用对应的校验方法。

创建校验函数
结果图
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 6,570评论 3 22
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 165评论 0 0
  • 来自深入理解ES6第十二章,由于最近业务中经常用到,记录一下 这里内容都太学术了,有一篇简单介绍Proxy作用的文...
    NowhereToRun阅读 1,027评论 0 1
  • 2017年7月4日,暴雨骤至! 故乡的午后,被燥热肆虐了良久之后,清风不期而至,驱散了连日的夏热。傍晚时分,走在乡...
    kaka1011阅读 232评论 0 0
  • 雪夜感怀 不是诗前不惜身,佯狂也难假成真。 为贪李杜名千句,不怕愁多病且新。 笔下风光心底事,眼前月色梦中人。 句...
    让灵魂上路阅读 282评论 0 0