成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS每日一題:如何理解es6中的Proxy?

tinysun1234 / 621人閱讀

20190124問:

如何理解es6中的Proxy?

試題解析:對proxy的理解,可能會延伸到vue的雙向綁定
Proxy(代理) 定義

可以理解為為目標對象架設(shè)一層攔截,外界對該對象的訪問,都必須通過這層攔截

簡單示例:

 const obj = new Proxy({}, {
     get: (target, key, receiver) => {
         return "JS"
         console.log(`get ${key}`)
     },
     set: (target, key, value, receiver) => {
         console.log(`set ${key}`)
     },
 })
 
 obj.name = "JS 每日一題" 
 // set name
 // JS 每日一題
 
 obj.name 
 // 這里進入get的回調(diào)函數(shù),所有直接返回 JS 

從上面的示例中可以看出,Proxy存在一種機制,可以對外界的讀寫操作進行改寫

Proxy 實例方法

proxy除了代理get,set操作,還能代理其它的操作,如下

handler.getPrototypeOf()

// 在讀取代理對象的原型時觸發(fā)該操作,比如在執(zhí)行 Object.getPrototypeOf(proxy) 時。

handler.setPrototypeOf()

// 在設(shè)置代理對象的原型時觸發(fā)該操作,比如在執(zhí)行 Object.setPrototypeOf(proxy, null) 時。

handler.isExtensible()

// 在判斷一個代理對象是否是可擴展時觸發(fā)該操作,比如在執(zhí)行 Object.isExtensible(proxy) 時。

handler.preventExtensions()

// 在讓一個代理對象不可擴展時觸發(fā)該操作,比如在執(zhí)行 Object.preventExtensions(proxy) 時。

handler.getOwnPropertyDescriptor()

// 在獲取代理對象某個屬性的屬性描述時觸發(fā)該操作,比如在執(zhí)行 Object.getOwnPropertyDescriptor(proxy, "foo") 時。

handler.defineProperty()

// 在定義代理對象某個屬性時的屬性描述時觸發(fā)該操作,比如在執(zhí)行 Object.defineProperty(proxy, "foo", {}) 時。

handler.has()

// 在判斷代理對象是否擁有某個屬性時觸發(fā)該操作,比如在執(zhí)行 "foo" in proxy 時。

handler.get()

// 在讀取代理對象的某個屬性時觸發(fā)該操作,比如在執(zhí)行 proxy.foo 時。

handler.set()

// 在給代理對象的某個屬性賦值時觸發(fā)該操作,比如在執(zhí)行 proxy.foo = 1 時。

handler.deleteProperty()

// 在刪除代理對象的某個屬性時觸發(fā)該操作,比如在執(zhí)行 delete proxy.foo 時。

handler.ownKeys()

// 在獲取代理對象的所有屬性鍵時觸發(fā)該操作,比如在執(zhí)行 Object.getOwnPropertyNames(proxy) 時。

handler.apply()

// 在調(diào)用一個目標對象為函數(shù)的代理對象時觸發(fā)該操作,比如在執(zhí)行 proxy() 時。

handler.construct()

// 在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行new proxy() 時。
為什么要使用Proxy

攔截和監(jiān)視外部對對象的訪問

降低函數(shù)或類的復雜度

在復雜操作前對操作進行校驗或?qū)λ栀Y源進行管理

題外思考

如何用proxy實現(xiàn)雙向綁定?

往期

JS每日一題: 前端的緩存有哪些?都適用什么場景?區(qū)別是什么?
JS每日一題: Call,Apply,Bind的使用與區(qū)別,如何實現(xiàn)一個bind?
JS每日一題: 說說你對前端模塊化的理解
JS每日一題: web安全攻擊手段有哪些?以及如何防范

關(guān)于JS每日一題

JS每日一題可以看成是一個語音答題社區(qū)
每天利用碎片時間采用60秒內(nèi)的語音形式來完成當天的考題
群主在次日0點推送當天的參考答案

注 絕不僅限于完成當天任務(wù),更多是查漏補缺,學習群內(nèi)其它同學優(yōu)秀的答題思路

點擊加入答題

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101443.html

相關(guān)文章

  • JS每日一題如何理解es6中的Proxy?

    20190124問: 如何理解es6中的Proxy? 試題解析:對proxy的理解,可能會延伸到vue的雙向綁定 Proxy(代理) 定義 可以理解為為目標對象架設(shè)一層攔截,外界對該對象的訪問,都必須通過這層攔截 簡單示例: const obj = new Proxy({}, { get: (target, key, receiver) => { return JS ...

    PumpkinDylan 評論0 收藏0
  • 前端知識點(二)

    摘要:在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    zacklee 評論0 收藏0
  • 前端知識點(二)

    摘要:在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    lbool 評論0 收藏0
  • 前端知識點(二)

    摘要:在給一個目標對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    Alex 評論0 收藏0
  • JS每日一題:Es6中新增的數(shù)據(jù)類型有哪些?使用場景?

    摘要:問中新增的數(shù)據(jù)類型有哪些使用場景中新增一種原始數(shù)據(jù)類型最大的特點是唯一性,值通過函數(shù)生成在中對象的屬性都是字符串,我們使用他人定義的對象,然后去新增自己的屬性,這樣容易起沖突覆蓋原有的屬性也可以看成為一個字符串,不過這個字符能保證是獨一無二 20190125問: Es6中新增的數(shù)據(jù)類型有哪些?使用場景? es6中新增一種原始數(shù)據(jù)類型Symbol,最大的特點是唯一性,Symbol值通過S...

    jsummer 評論0 收藏0

發(fā)表評論

0條評論

tinysun1234

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<