Proxy() ã³ã³ã¹ãã©ã¯ã¿ã¼
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2016å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
Proxy() ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ Proxy ãªãã¸ã§ã¯ããçæãã¾ãã
æ§æ
new Proxy(target, handler)
弿°
target-
Proxyã§ã©ããããã¿ã¼ã²ããã®ãªãã¸ã§ã¯ãã§ãããããã種é¡ã®ãªãã¸ã§ã¯ããä¾ãã°ãã¤ãã£ãé åã颿°ãå¥ã®ãããã·ã¼ãªã©ããªããã¨ãã§ãã¾ãã handler-
颿°ãããããã£ã¨ãã¦æã¤ãªãã¸ã§ã¯ãã§ããã®é¢æ°ã§ã Proxy
pã«å¯¾ãã¦æä½ãè¡ãããå ´åã®æåãå®ç¾©ãã¾ãã
解説
Proxy() ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ããã¨ãæ°ãã Proxy ãªãã¸ã§ã¯ããçæã§ãã¾ãã
ãã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ 2 ã¤ã®å¿
é ã®å¼æ°ãåãã¾ãã
targetã¯ãããã·ã¼ã使ãããªãã¸ã§ã¯ãã§ããhandlerã¯ãããã·ã¼ã®ã«ã¹ã¿ã åä½ãå®ç¾©ãããªãã¸ã§ã¯ãã§ãã
handler ã空ã«ããã¨ãã»ã¨ãã©ãã¹ã¦ã®ç¹ã§ã¿ã¼ã²ããã¨ã¾ã£ããåãããã«æ¯ãèããããã·ã¼ã使ãã¾ãã handler ãªãã¸ã§ã¯ãä¸ã§é¢æ°ç¾¤ã®ãããããå®ç¾©ãããã¨ã§ããããã·ã¼ã®åä½ã®ç¹å®ã®å´é¢ãã«ã¹ã¿ãã¤ãºãããã¨ãã§ãã¾ããä¾ãã°ã get() ãå®ç¾©ãããã¨ã§ã ã¿ã¼ã²ããã®ããããã£ã¢ã¯ã»ãµã¼ã®ã«ã¹ã¿ãã¤ãºããããã¼ã¸ã§ã³ãæä¾ãããã¨ãã§ãã¾ãã
ãã³ãã©ã¼é¢æ°
ãã®ç¯ã§ã¯ãå®ç¾©ãããã¨ãã§ãããã¹ã¦ã®ãã³ãã©ã¼é¢æ°ãåæãã¾ãããã³ãã©ã¼é¢æ°ã¯ã対象ãªãã¸ã§ã¯ãã®å¼ã³åºãããã©ããããã®ã§ããã©ããã¨å¼ã°ãããã¨ãããã¾ãã
handler.apply()-
颿°å¼ã³åºãã®ãã©ããã§ãã
handler.construct()-
newæ¼ç®åã®ãã©ããã§ãã handler.defineProperty()-
Object.definePropertyã®ãã©ããã§ãã handler.deleteProperty()-
deleteæ¼ç®åã®ãã©ããã§ãã handler.get()-
ããããã£å¤ã®åå¾ã®ãã©ããã§ãã
handler.getOwnPropertyDescriptor()-
Object.getOwnPropertyDescriptorã®ãã©ããã§ãã handler.getPrototypeOf()-
Object.getPrototypeOfã®ãã©ããã§ãã handler.has()-
inæ¼ç®åã®ãã©ããã§ãã handler.isExtensible()-
Object.isExtensibleã®ãã©ããã§ãã handler.ownKeys()-
Object.getOwnPropertyNamesãObject.getOwnPropertySymbolsã®ãã©ããã§ãã handler.preventExtensions()-
Object.preventExtensionsã®ãã©ããã§ãã handler.set()-
ããããã£å¤ã®è¨å®ã®ãã©ããã§ãã
handler.setPrototypeOf()-
Object.setPrototypeOfã®ãã©ããã§ãã
ä¾
>鏿çã«ããããã£ã¢ã¯ã»ãµã¼ã®ãããã·ã¼ãè¡ã
ãã®ä¾ã§ã¯ãã¿ã¼ã²ãã㯠notProxied 㨠proxied ã® 2 ã¤ã®ããããã£ãæã£ã¦ãã¾ãã proxied ã«å¥ã®å¤ãè¿ãããã以å¤ã®ã¢ã¯ã»ã¹ãã¿ã¼ã²ããã«è¨±å¯ãããã³ãã©ã¼ãå®ç¾©ãã¾ãã
const target = {
notProxied: "original value",
proxied: "original value",
};
const handler = {
get(target, prop, receiver) {
if (prop === "proxied") {
return "replaced value";
}
return Reflect.get(...arguments);
},
};
const proxy = new Proxy(target, handler);
console.log(proxy.notProxied); // "original value"
console.log(proxy.proxied); // "replaced value"
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-proxy-constructor > |