1. 程式人生 > 其它 >JS之proxy代理

JS之proxy代理

 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代理物件,執行物件裡面的語句;