ES6新標準 Proxy的講解

2021-10-06 08:40:03 字數 1687 閱讀 9113

隨著vue3.0離我們越來越近了,無意中聽到的一句話,在學習3.0之前最好把es6的 map和set資料結構,proxy和reflect。

今天它來了,proxy 是es6新增加的乙個東西 翻譯過來就是**意思。

在js中有一種設計模式叫做**模式,為乙個目標物件新增乙個 中間層 不讓直接訪問和修改目標物件

**模式是一種對程式物件進行控制性訪問的一類解決方案。

不過這個**模式並不是 我們今天說的 重點,只是proxy 所實現就是**模式

你可以把proxy 理解成在目標物件前面加了乙個"攔截"層,外界想要訪問目標物件必須先過一下這個攔截。大家都知道vue2.0 使用的攔截是 object.definedproperty() 但是3.0很大的改寫就是 用了 proxy 做了攔截

這裡舉乙個小例子吧

var obj=

newproxy(,

,set

:function()

})console.

log(obj.name)

;// 獲取數值

obj.name=

"zhangsan"

// 設定數值

下面是輸出的結果

從上面可以看出和 確實實現了攔截 我們想要獲取和設定物件數值的時候,都出現了我們設定的攔截列印資訊

有的童鞋可能納悶 都攔截了 我們怎麼獲取物件的屬性值呢

這還不容易當然是 把攔截去掉不就行了

又有點廢話了 那要這個proxy 有啥用 至於怎麼獲取 屬性值 之後的 reflect 中會進行詳細講解 今天 只是講一講攔截層

不過上面的卻不是 玩笑話 你把攔截內容設定為空他就直接訪問到 源物件了

var obj=

var proxy=

newproxy

(obj,

)console.

log(proxy.name)

;// 輸出 張三

當然要想使 攔截生成 必須是 由 proxy 例項化生成物件才可以哦 比如上面的proxy

工作中我們會把他們分開進行書寫

正確格式是

var target=

// 目標物件

var handler=

//進行攔截的內容

var proxy=

newproxy

(target,handler)

;// **物件

下面我們正式進入詳細講解

其實上面的 get 和set方法 裡面還可以傳入引數

var obj=

var proxy=

newproxy

(obj,

,set

:function

(target,key,value,receiver)})

proxy.name;

// 獲取 get

proxy.age=18;

// 設定 set

以後繼續 更新 關注我

ES6中Proxy的相容處理

proxy物件用於定義基本操作的自定義行為 如屬性查詢 賦值 列舉 函式呼叫等 proxy部分相容處理 author 範圍兄 window.proxy window.proxy function target,handler function proxy else else if handler.c...

ES6 中的Reflect和Proxy簡單介紹

proxy 與 reflect 是 es6 為了操作物件引入的 api reflect 可以用於獲取目標物件的行為,它與 object 類似,但是更易讀,為操作物件提供了一種更優雅的方式,函式式程式設計。它的方法與 proxy 是對應的。const obj reflect api方法1.refect...

ES6 新內容(二)Proxy和Iterator

1.proxy和reflect攔截 2.iterator遍歷器 proxy 攔截作用。var proxy new proxy target,handler proxy.revocable方法返回乙個可取消的proxy例項。在 proxy 的情況下,目標物件內部的this關鍵字會指向 proxy 修改...