Proxy 代理
阿新 • • 發佈:2018-01-15
ble 新建 proxy 一個 site urn 目標 pan post
Proxy 是代理的構造函數,通過新建對象的形式,對新建的對象的操作進行自定義處理
語法:
new Promise( target , handler )
target 是攔截操作的目標對象,
handler 是用來自定義代理對象的各種可代理操作.具體使用可參考下面這個例子:
var target = new Proxy(target, { "get": function (oTarget, sKey) { return oTarget[sKey] || oTarget.getItem(sKey) || undefined; }, "set": function (oTarget, sKey, vValue) {if (sKey in oTarget) { return false; } return oTarget.setItem(sKey, vValue); }, "deleteProperty": function (oTarget, sKey) { if (sKey in oTarget) { return false; } return oTarget.removeItem(sKey); }, "enumerate": function (oTarget, sKey) { return oTarget.keys(); }, "ownKeys": function(oTarget, sKey) { return oTarget.keys(); }, "has": function (oTarget, sKey) { return sKey in oTarget || oTarget.hasItem(sKey); }, "defineProperty": function (oTarget, sKey, oDesc) { if (oDesc && "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); } return oTarget; },"getOwnPropertyDescriptor": function (oTarget, sKey) { var vValue = oTarget.getItem(sKey); return vValue ? { "value": vValue, "writable": true, "enumerable": true, "configurable": false } : undefined; }, });
通過新建對象形式返回對象的handler不能撤銷,特意提供了一個API來提供可撤銷代理的函數
Proxy.revocable( target , handler )
var revocable = Proxy.revocable({}, { get(target, name) { return "[[" + name + "]]"; } }); var proxy = revocable.proxy; proxy.foo; // "[[foo]]" revocable.revoke(); // 執行撤銷方法 proxy.foo; // TypeError proxy.foo = 1 // 同樣 TypeError delete proxy.foo; // 還是 TypeError typeof proxy // "object",因為 typeof 不屬於可代理操作
Proxy 代理