JS之proxy代理
阿新 • • 發佈:2020-12-31
1.proxy物件用於建立一個代理,用來對一個物件進行自定義(屬性查詢,函式呼叫,賦值,列舉等)和攔截; 2.語法:let b=new proxy(target,handler); 3.target物件,可以是代理的目標物件(可以是原生陣列,函式,或者是另一個代理); 4.handler通常是一種以函式為屬性的物件,裡面的屬性函式定義了一些對代理b物件的操作; 5.handler裡面的屬性函式: a.handler.getPrototypeOf() 訪問物件的原型 b.handler.setPrototypeOf(target,prototype) 為代理物件設定新的原型,返回值為bool值 c.handler.isExtensible(target) 返回一個bool值 d.handler.preventExtensions(target) 返回一個布林值. e.handler.getOwnPropertyDescriptor(target,prop) 必須返回一個 object 或 undefined f.handler.defineProperty(target,property,descriptor) 用於修改·代理物件的屬性以及屬性名 必須以一個 Boolean 返回,表示定義該屬性的操作成功與否 g.handler.has(target,prop) 用於檢查是否存在該屬性 返回一個 boolean 屬性的值. h.handler.get(target,property,receiver(Proxy或者繼承Proxy的物件)) 可以返回任何值 i.handler.set(target,property,value,receiver) 設定屬性值操作 返回一個布林值 j.handler.deleteProperty(target,property) 用於刪除代理物件的屬性名 k.handler.ownKeys(target) l.handler.apply(target,thisArg,argumentsList) 可以返回任何值 m.handler.construct(target argumentsList newTarget) 必須返回一個物件 6.let a=new proxy(test,{ //進行自定義和攔截; get(target,property){ return target[property]; } }); 訪問:a.(test的屬性名); 會自動呼叫a proxy代理物件,執行物件裡面的語句;