成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

javascript代理模式

Cympros / 3469人閱讀

摘要:著名的代理模式例子為引用計數(shù)英語指針對象。是一個構(gòu)造函數(shù),是被代理的對象,是聲明了各類代理操作的對象,最終返回一個代理對象。在給一個目標(biāo)對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行時。

所謂的代理者是指一個類別可以作為其它東西的接口。代理者可以作任何東西的接口:網(wǎng)絡(luò)連接、內(nèi)存中的大對象、文件或其它昂貴或無法復(fù)制的資源。

著名的代理模式例子為引用計數(shù)(英語:reference counting)指針對象。

當(dāng)一個復(fù)雜對象的多份副本須存在時,代理模式可以結(jié)合享元模式以減少內(nèi)存用量。典型作法是創(chuàng)建一個復(fù)雜對象及多個代理者,每個代理者會引用到原本的復(fù)雜對象。而作用在代理者的運算會轉(zhuǎn)送到原本對象。一旦所有的代理者都不存在時,復(fù)雜對象會被移除。

什么是Proxy對象
==========
**Proxy對象就是可以讓你去對JavaScript中的一切合法對象的基本操作進(jìn)行自定義.然后用你自定義的操作去覆蓋其對象的基本操作.也就是當(dāng)一個對象去執(zhí)行一個基本操作時,其執(zhí)行的過程和結(jié)果是你自定義的,而不是對象的**

首先Proxy的語法是:

    let p = new Proxy(target, handler);


 1. target是你要代理的對象.它可以是JavaScript中的任何合法對象.如: (數(shù)組, 對象, 函數(shù)等等)
 2. handler是你要自定義操作方法的一個集合.
 3. p是一個被代理后的新對象,它擁有target的一切屬性和方法.只不過其行為和結(jié)果是在handler中自定義的.

在支持 Proxy 的瀏覽器環(huán)境中,Proxy 是一個全局對象,
可以直接使用。Proxy(target, handler) 是一個構(gòu)造函數(shù),target 是被代理的對象,
handlder 是聲明了各類代理操作的對象,最終返回一個代理對象。
外界每次通過代理對象訪問 target 對象的屬性時,就會經(jīng)過 handler 對象,
從這個流程來看,代理對象很類似 middleware(中間件)。
那么 Proxy 可以攔截什么操作呢?
最常見的就是 get(讀?。et(修改)對象屬性等操作,
此外,Proxy 對象還提供了一個 revoke 方法,可以隨時注銷所有的代理操作。

**Proxy對象的作用.即是之前所受的用于定義基本操作的自定義行為.
同樣的get和set操作.沒有沒代理的對象所得的結(jié)果是其JavaScript本身的執(zhí)行機(jī)制運行計算后所得到的.
而被代理了的對象的結(jié)果則是我們自定義的.**


Proxy所能代理的范圍--handler


**在上面代碼中,我們看到了構(gòu)造一個代理對象時所傳的第二個參數(shù)handler,
這個handler對象是由get和set兩個函數(shù)方法組成的.
這兩個方法會在一個對象被get和set時被調(diào)用執(zhí)行,
以代替原生對象上的操作.那么為什么在handler,
定義get和set這兩個函數(shù)名之后就代理對象上的get和set操作了呢?
實際上handler本身就是ES6所新設(shè)計的一個對象.它的作用就是用來自定義代理對象的各種可代理操作。
它本身一共有13中方法,每種方法都可以代理一種操作.其13種方法如下:

handler.getPrototypeOf()

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

handler.setPrototypeOf()

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

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

handler.preventExtensions()

// 在讓一個代理對象不可擴(kuò)展時觸發(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)用一個目標(biāo)對象為函數(shù)的代理對象時觸發(fā)該操作,比如在執(zhí)行 proxy() 時。

handler.construct()

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



**

Proxy的作用

對于代理模式Proxy的作用主要體現(xiàn)在三個方面:

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

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

3、 在復(fù)雜操作前對操作進(jìn)行校驗或?qū)λ栀Y源進(jìn)行管理

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/106334.html

相關(guān)文章

  • 100行代碼讓您學(xué)會JavaScript原生的Proxy設(shè)計模式

    摘要:面向?qū)ο笤O(shè)計里的設(shè)計模式之代理模式,相信很多朋友已經(jīng)很熟悉了。代表當(dāng)前執(zhí)行方法的實例,即方法調(diào)用者。代表具體的方法名稱。現(xiàn)在我們再次調(diào)用,傳入構(gòu)造器返回的代理對象打印輸出,代理邏輯生效了和的一樣優(yōu)雅地實現(xiàn)了代理設(shè)計模式。 showImg(https://segmentfault.com/img/remote/1460000016760603);面向?qū)ο笤O(shè)計里的設(shè)計模式之Proxy(代理...

    txgcwm 評論0 收藏0
  • 細(xì)談JavaScript中的一些設(shè)計模式

    摘要:注意事項聲明函數(shù)時候處理業(yè)務(wù)邏輯區(qū)分和單例的區(qū)別,配合單例實現(xiàn)初始化構(gòu)造函數(shù)大寫字母開頭推薦注意的成本。簡單工廠模式使用一個類通常為單體來生成實例。 @(書籍閱讀)[JavaScript, 設(shè)計模式] 常見設(shè)計模式 一直對設(shè)計模式不太懂,花了一下午加一晚上的時間,好好的看了看各種設(shè)計模式,并總結(jié)了一下。 設(shè)計模式簡介 設(shè)計模式概念解讀 設(shè)計模式的發(fā)展與在JavaScript中的應(yīng)用 ...

    30e8336b8229 評論0 收藏0
  • JS代理模式JavaScript設(shè)計模式與開發(fā)實踐》閱讀筆記

    摘要:保護(hù)代理和虛擬代理保護(hù)代理當(dāng)有許多需求要向某對象發(fā)出一些請求時,可以設(shè)置保護(hù)代理,通過一些條件判斷對請求進(jìn)行過濾。虛擬代理在程序中可以能有一些代價昂貴的操作。而虛擬代理是最常用的一種代理模式。 代理模式 代理模式是為一個對象提供一個代用品或占位符,以便控制對它的訪問。 保護(hù)代理和虛擬代理 保護(hù)代理:當(dāng)有許多需求要向某對象發(fā)出一些請求時,可以設(shè)置保護(hù)代理,通過一些條件判斷對請求進(jìn)行過濾。...

    mist14 評論0 收藏0
  • JavaScript 模式》知識點小抄本(下)

    摘要:缺點不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。預(yù)防低水平人員帶來的風(fēng)險。開閉原則,高拓展性。這里的訂閱者稱為觀察者,而被觀察者稱為發(fā)布者,當(dāng)一個事件發(fā)生,發(fā)布者會發(fā)布通知所有訂閱者,并常常以事件對象形式傳遞消息。 介紹 最近開始給自己每周訂個學(xué)習(xí)任務(wù),學(xué)習(xí)結(jié)果反饋為一篇文章的輸出,做好學(xué)習(xí)記錄。 這一周(02.25-03.03)我定的目標(biāo)是《JavaScript 模式》...

    xiguadada 評論0 收藏0
  • JavaScript 設(shè)計模式(三):代理模式

    摘要:虛擬代理延遲執(zhí)行虛擬代理的目的,是將開銷大的運算延遲到需要時再執(zhí)行。 showImg(https://segmentfault.com/img/bVbuitm?w=800&h=600); 代理模式:為一個對象提供一個代用品或占位符,以便控制它的訪問。 當(dāng)我們不方便直接訪問某個對象時,或不滿足需求時,可考慮使用一個替身對象來控制該對象的訪問。替身對象可對請求預(yù)先進(jìn)行處理,再決定是否轉(zhuǎn)交給...

    Keagan 評論0 收藏0

發(fā)表評論

0條評論

Cympros

|高級講師

TA的文章

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