javascript 中的自動化—元編程(中)

繼續(xù)分享在 javascript 中是如何實現(xiàn)元編程,我們先介紹一下在 js 中的代理以及代理模式是什么,Proxy 從名字上看顯而易見,就是對真實對象進行代理,為了是隱藏真實對象,且提供統(tǒng)一接口。大家記住這個就行,以后在設(shè)計模式中會為大家詳細講解,在元編程中的代理的目的是—提供統(tǒng)一接口。

代理模式

第一參數(shù)為要代理的對象,通過 new 創(chuàng)建的 proxy 對象是代理什么對象或類型,可以代理以下類型的對象,提醒他們都是 object 類型。

proxy 對象創(chuàng)建方式

代理創(chuàng)建對象與其代理對象類型保持一致。

這里處理函數(shù),其實就是復(fù)寫一些對象一些基本方法,代理也就是在原有對象上再套上一層,為其原有的方法添加新特性。

有關(guān) handler(處理方法)是通過代碼給大家解釋一下,我們通過 hanlder 復(fù)寫對象原有的 get 方法,如果屬性在對象中不存,我們在獲取時就會返回 37 ,代碼很簡單也很明了,就不進行過多解釋了,也便于大家理解 handler 的用途。

這是代理可以復(fù)寫的方法,在元編程中的代理一般不單獨使用,他會與下面介紹的 Reflect 對象一起共同完成對元編程的實現(xiàn)。所以他們倆的方法也是一一對應(yīng)的。因為代理一個對象后,我們復(fù)寫了原有方法,還需要用 Reflect 來調(diào)用原有的方法。

反射方法

介紹 Reflect API?

Reflect 不是構(gòu)造函數(shù), 要使用的時候,直接通過 Reflect.method() 來調(diào)用, Reflect 有的方法和 Proxy 差不多, 而且多數(shù) Reflect 方法原生的 Object 已經(jīng)重新實現(xiàn)了。

反射
反射
代理和反射對應(yīng)圖

*這里給大家提一下 revoke 方法,如果執(zhí)行這個 revoke 方法就會銷毀對象屬性。

get 方法

實戰(zhàn)以動態(tài)校驗為例來進行講解。

示例

來看一看,動態(tài)校驗是如何實現(xiàn)的,在運行時當(dāng)我們?yōu)閷ο筚x值時,進行動態(tài)地校驗,代碼很清晰,估計大家一看就明白邏輯,這也就是會說話的代碼。

檢驗函數(shù)

這里如果有傳入 validations 回調(diào)函數(shù),就使用傳入的回調(diào)函數(shù),如果沒有就用默認 ()=>true。validations 是一個校驗對象,根據(jù)傳入 key 來調(diào)用對應(yīng)的校驗方法。

創(chuàng)建校驗函數(shù)
結(jié)果圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 6,717評論 3 22
  • 特別說明,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 178評論 0 0
  • 來自深入理解ES6第十二章,由于最近業(yè)務(wù)中經(jīng)常用到,記錄一下 這里內(nèi)容都太學(xué)術(shù)了,有一篇簡單介紹Proxy作用的文...
    NowhereToRun閱讀 1,107評論 0 1
  • 2017年7月4日,暴雨驟至! 故鄉(xiāng)的午后,被燥熱肆虐了良久之后,清風(fēng)不期而至,驅(qū)散了連日的夏熱。傍晚時分,走在鄉(xiāng)...
    kaka1011閱讀 256評論 0 0
  • 雪夜感懷 不是詩前不惜身,佯狂也難假成真。 為貪李杜名千句,不怕愁多病且新。 筆下風(fēng)光心底事,眼前月色夢中人。 句...
    讓靈魂上路閱讀 342評論 0 0

友情鏈接更多精彩內(nèi)容