Reflect
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2016å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
Reflect åå空éãªãã¸ã§ã¯ãã«ã¯ãä»å
¥å¯è½ãª JavaScript ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãããå¼ã³åºãããã®éçã¡ã½ãããå«ã¾ãã¦ãã¾ãããããã®ã¡ã½ããã¯ããããã·ãã³ãã©ã¼ã®ãã®ã¨åä¸ã§ãã
解説
ä»ã®å¤ãã®ã°ãã¼ãã«ãªãã¸ã§ã¯ãã¨ã¯ç°ãªããReflect ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ããã¾ãããnew æ¼ç®åã§ä½¿ç¨ãããã Reflect ãªãã¸ã§ã¯ãã颿°ã¨ãã¦å¼ã³åºããããããã¨ã¯ã§ãã¾ããã Reflect ã®ãã¹ã¦ã®ããããã£ã¨ã¡ã½ããã¯ï¼Math ãªãã¸ã§ã¯ãã¨åæ§ã«ï¼éçã§ãã
Reflect ãªãã¸ã§ã¯ãã¯ãããã·ã¼ãã³ãã©ã¼ã®ã¡ã½ããã¨åãååããã¤éç颿°ç¾¤ãæä¾ãã¦ãã¾ãã
Reflectã®ä¸»ãªç¨éã¯ãProxyãã³ãã©ã¼ã®ãã©ããã«ããã¦ããã©ã«ãã®è»¢éåä½ãæä¾ãããã¨ã§ãããããã·ã¼ã¯ããªãã¸ã§ã¯ãã«å¯¾ããæä½ã«ä»å
¥ããããã«ä½¿ç¨ããã¾ããããã¯ããªãã¸ã§ã¯ãå
é¨ã¡ã½ããã«å¯¾ããç¬èªã®å®è£
ãæä¾ãã¾ããReflect API ã¯ã対å¿ããå
é¨ã¡ã½ãããå¼ã³åºãããã«ä½¿ç¨ããã¾ããä¾ãã°ãä¸è¨ã³ã¼ãã¯ãããã·ã¼ p ãçæãããããæã¤ deleteProperty ãã©ãããã[[Delete]] å
é¨ã¡ã½ããã«ä»å
¥ãã¾ããReflect.deleteProperty() ã¯ããã©ã«ãã® [[Delete]] åä½ã targetObject ã«å¯¾ãã¦ç´æ¥å¼ã³åºãããã«ä½¿ç¨ããã¾ãããã㯠delete ã§ç½®ãæãããã¾ãããReflect ã使ç¨ããã°ãããããã®å
é¨ã¡ã½ããã«å¯¾å¿ããæ§æãè¦ããå¿
è¦ããªããªãã¾ãã
const p = new Proxy(
{},
{
deleteProperty(targetObject, property) {
// ç¬èªæ©è½: åé¤ã®ãã°
console.log("ããããã£ãåé¤:", property);
// ä»å
¥å
ã®ããã©ã«ãã®åä½ãå®è¡
return Reflect.deleteProperty(targetObject, property);
},
},
);
Reflect ã¡ã½ããã¯ãå
é¨ã¡ã½ãããå¼ã³åºãæ¹æ³ãããç´°ããå¶å¾¡ãããã¨ãã§ãã¾ããä¾ãã°ãReflect.construct() ã¯ãç¹å®ã® new.target å¤ãæã¤ã¿ã¼ã²ãã颿°ãæ§ç¯ããå¯ä¸ã®æ¹æ³ã§ãã颿°ãå¼ã³åºãéã« new æ¼ç®åã使ç¨ããå ´åãnew.target ã®å¤ã¯å¸¸ã«ãã®é¢æ°èªä½ã«ãªãã¾ããããã¯ãµãã¯ã©ã¹åã«ããã¦éè¦ãªå¹æãåã¼ãã¾ããä¾ãã°ãReflect.get() ã使ç¨ããã¨ãã²ãã¿ã¼ãç¬èªã® this å¤ã§å®è¡ã§ãã¾ãã䏿¹ãããããã£ã¢ã¯ã»ãµã¼ã¯å¸¸ã«ç¾å¨ã®ãªãã¸ã§ã¯ãã this å¤ã¨ãã¦ä½¿ç¨ãã¾ãã
ã»ã¼ãã¹ã¦ã® Reflect ã¡ã½ããã®åä½ã¯ããã以å¤ã«ãä»ã®æ§æãã¡ã½ããã§å®ç¾å¯è½ã§ãããããã®ã¡ã½ããã®ä¸é¨ã«ã¯ãObject ä¸ã«ååã®å¯¾å¿ããéçã¡ã½ãããåå¨ãã¾ãããå¾®å¦ãªéããããã¾ããæ£ç¢ºãªå·®ç°ã«ã¤ãã¦ã¯ãããããã® Reflect ã¡ã½ããã®èª¬æãåç
§ãã¦ãã ããã
éçããããã£
Reflect[Symbol.toStringTag]-
[Symbol.toStringTag]ããããã£ã®åæå¤ã¯æåå"Reflect"ã§ãããã®ããããã£ã¯Object.prototype.toString()ã§ä½¿ç¨ããã¾ãã
éçã¡ã½ãã
Reflect.apply()-
target颿°ãã弿°argumentsListã§æå®ããã弿°ã§å¼ã³åºãã¾ããFunction.prototype.apply()ãåç §ãã¦ãã ããã Reflect.construct()-
颿°ã¨ãã¦ã®
newæ¼ç®åã§ããnew target(...argumentsList)ãå¼ã³åºãã®ã¨ç価ã§ããå¥ãªãããã¿ã¤ããæå®ããããã«ãªãã·ã§ã³ãæå®ãããã¨ãã§ãã¾ãã Reflect.defineProperty()-
Object.defineProperty()ã¨åæ§ã§ããè¿å¤ã¯è«çå¤ã§ãããããã£ãå®ç¾©ã§ããå ´åã¯trueãè¿ãã¾ãã Reflect.deleteProperty()-
颿°ã¨ãã¦ã®
deleteæ¼ç®åã§ããdelete target[propertyKey]ãå¼ã³åºãã®ã¨ç価ã§ãã Reflect.get()-
ãã®ããããã£ã®å¤ãè¿ãã¾ãããªãã¸ã§ã¯ãããã®ããããã£ã®åå¾ (
target[propertyKey]) ã颿°ã«ãããããªãã®ã§ãã Reflect.getOwnPropertyDescriptor()-
Object.getOwnPropertyDescriptor()ã«ä¼¼ã¦ãã¾ããæå®ããããããã£ãåå¨ããå ´åã«ããããã£è¨è¿°åãè¿ããåå¨ããªãå ´åã¯undefinedãè¿ãã¾ãã Reflect.getPrototypeOf()-
Object.getPrototypeOf()ã¨åãã§ãã Reflect.has()-
è«çå¤ã§ã対象ããã®ããããã£ãæã£ã¦ãããã©ãããè¿ãã¾ããåºæã®å ´åãç¶æ¿ã®å ´åãå«ã¿ã¾ãã
inæ¼ç®åã颿°ã«ãããã®ã§ãã Reflect.isExtensible()-
Object.isExtensible()ã¨åãã§ããè«çå¤ãè¿ããtrueãªãã°å¯¾è±¡ãæ¡å¼µå¯è½ã§ãã Reflect.ownKeys()-
ç¬èªã® (ç¶æ¿ããã¦ãããã®ã§ã¯ãªã) ããããã£ã®ãã¼ããã¤æååã®é åãè¿ãã¾ãã
Reflect.preventExtensions()-
Object.preventExtensions()ã«ä¼¼ã¦ãã¾ããè«çå¤ãè¿ããtrueã¯æ´æ°ã«æåããå ´åã§ãã Reflect.set()-
å¤ãããããã£ã«å²ãå½ã¦ã颿°ã§ããæ´æ°ã«æåããã
trueã¨ãªãè«çå¤ãè¿ãã¾ãã Reflect.setPrototypeOf()-
ãªãã¸ã§ã¯ãã®ãããã¿ã¤ããè¨å®ãã颿°ã§ããè«çå¤ãè¿ãã
trueãªãã°æåã§ãã
ä¾
>ãªãã¸ã§ã¯ããç¹å®ã®ããããã£ãæã£ã¦ãããã©ãããæ¤åº
const duck = {
name: "Maurice",
color: "white",
greeting() {
console.log(`Quaaaack! My name is ${this.name}`);
},
};
Reflect.has(duck, "color");
// true
Reflect.has(duck, "haircut");
// false
ãªãã¸ã§ã¯ããææãããã¼ã®è¿å´
Reflect.ownKeys(duck);
// [ "name", "color", "greeting" ]
ãªãã¸ã§ã¯ãã¸ã®æ°ããããããã£ã®è¿½å
Reflect.set(duck, "eyes", "black");
// æåããå ´å㯠"true" ãè¿ãã¾ãã
// "duck" ã«ã¯ "eyes: 'black'" ããããã£ãè¨å®ããã¾ããã
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-reflect-object > |