Object.prototype.__lookupGetter__()
鿍奍;: ãã®æ©è½ã¯éæ¨å¥¨ã«ãªãã¾ãããã¾ã 対å¿ãã¦ãããã©ã¦ã¶ã¼ãããããããã¾ãããããã§ã«é¢é£ããã¦ã§ãæ¨æºããåé¤ããã¦ããããåé¤ã®æç¶ãä¸ã§ããããäºææ§ã®ããã ãã«æ®ããã¦ããå¯è½æ§ãããã¾ãã使ç¨ãé¿ããã§ããã°æ¢åã®ã³ã¼ãã¯æ´æ°ãã¦ãã ããããã®ãã¼ã¸ã®ä¸é¨ã«ããäºææ§ä¸è¦§è¡¨ãè¦ã¦å¤æãã¦ãã ããããã®æ©è½ã¯çªç¶åä½ããªããªãå¯è½æ§ããããã¨ã«æ³¨æãã¦ãã ããã
ã¡ã¢:
ãã®æ©è½ã¯éæ¨å¥¨ã¨ãªãã Object.getOwnPropertyDescriptor() API ã«ç½®ãæãããã¾ããããã®ã¡ã½ããã®åä½ã¯ã¦ã§ãã®äºææ§ã ãã®ããã«ä»æ§åããããã®ã§ãããã©ã®ãã©ãããã©ã¼ã ã§ãå®è£
ãããã¨ãè¦æ±ããã¦ããããã§ã¯ããã¾ãããã©ãã§ãåä½ããã¨ã¯éãã¾ããã
__lookupGetter__() 㯠Object ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãæå®ãããããããã£ã«çµã³ã¤ãããã¦ããã²ãã¿ã¼é¢æ°ãè¿ãã¾ãã
æ§æ
__lookupGetter__(prop)
弿°
prop-
ã²ãã¿ã¼é¢æ°ãè¿ãããããã£ã®ååã表ãæååã§ãã
è¿å¤
æå®ããããããã£ã®ã²ãã¿ã¼ã¨ãã¦ãã¤ã³ãããã颿°ã§ãããã®ãããªããããã£ãå¾ãããªãå ´åãã¾ãã¯ããããã£ããã¼ã¿ããããã£ã§ããå ´å㯠undefined ãè¿ãã¾ãã
解説
Object.prototype ç¶æ¿ãããã¹ã¦ã®ãªãã¸ã§ã¯ãï¼ã¤ã¾ãã null ãããã¿ã¤ããªãã¸ã§ã¯ããé¤ããã¹ã¦ã®ãªãã¸ã§ã¯ãï¼ã¯ __lookupGetter__() ã¡ã½ãããç¶æ¿ãã¦ãã¾ãããªãã¸ã§ã¯ãã®ããããã£ã«ã²ãã¿ã¼ãå®ç¾©ããã¦ããå ´åããã®ããããã£ã¯ãã®é¢æ°ã®è¿å¤ãåç
§ãã¦ããããããã®ããããã£ãéãã¦ã²ãã¿ã¼é¢æ°ãåç
§ãããã¨ã¯ã§ãã¾ããã __lookupGetter__() ã使ç¨ãããã¨ã§ããã®ã²ãã¿ã¼é¢æ°ãåç
§ãããã¨ãã§ãã¾ãã
__lookupGetter__() ã¯ãæå®ããããããã£ãæ¢ãããã«ãããã¿ã¤ããã§ã¼ã³ãèµ°æ»ãã¾ãããããã¿ã¤ããã§ã¼ã³ã®ä¸ã«ãããªãã¸ã§ã¯ããæå®ããèªåèªèº«ã®ããããã£ãæã£ã¦ããå ´åããã®ããããã£ã®ããããã£è¨è¿°åã® get 屿§ãè¿ãã¾ãããã®ããããã£ããã¼ã¿ããããã£ã®å ´åã¯ãundefined ãè¿ãã¾ããããããã£ããããã¿ã¤ããã§ã¼ã³å
¨ä½ã§å¾ãããªãå ´åã undefined ãè¿ãã¾ãã
__lookupGetter__() ã¯ä»æ§æ¸ã§ "normative optional" ã¨å®ç¾©ããã¦ãããããã¯å®è£
ãããã¨ãè¦æ±ããã¦ããªãã¨ãããã¨ã§ãããããã主è¦ãªãã©ã¦ã¶ã¼ã¯ãã¹ã¦å®è£
ãã¦ãã¾ããã使ãç¶ãããã¦ãããããé¤å»ãããå¯è½æ§ã¯ä½ãã§ãããããã©ã¦ã¶ã¼ã __lookupGetter__() ãå®è£
ããå ´åã__lookupSetter__()ã__defineGetter__()ã__defineSetter__() ã®åã¡ã½ãããå®è£
ããå¿
è¦ãããã¾ãã
ä¾
>__lookupGetter__() ã®ä½¿ç¨
const obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
};
obj.__lookupGetter__("foo");
// [Function: get foo]
æ¨æºã®æ¹æ³ã§ã²ãã¿ã¼ããããã£ãåç §
ããããã£ã®ã²ãã¿ã¼ãåç
§ããã«ã¯ã Object.getOwnPropertyDescriptor() API ã使ç¨ãã¾ãããã __lookupGetter__() ã¨æ¯è¼ãã¦ããã®ã¡ã½ããã§ã¯ã·ã³ãã«ããããã£ãåç
§ãããã¨ãã§ãã¾ãã Object.getOwnPropertyDescriptor() ã¡ã½ããã¯ã Object.prototype ãç¶æ¿ããªããã __lookupGetter__() ã¡ã½ãããæããªã null ãããã¿ã¤ããªãã¸ã§ã¯ãã§ãåä½ãã¾ãããã __lookupGetter__() ã®ãããã¿ã¤ããã§ã¼ã³ãèµ°æ»ããåä½ãéè¦ã§ããã°ã Object.getPrototypeOf() ã使ã£ã¦èªåã§å®è£
ãããã¨ãã§ãã¾ãã
const obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
};
Object.getOwnPropertyDescriptor(obj, "foo").get;
// [Function: get foo]
const obj2 = {
__proto__: {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
},
};
function findGetter(obj, prop) {
while (obj) {
const desc = Object.getOwnPropertyDescriptor(obj, prop);
if (desc) {
return desc.get;
}
obj = Object.getPrototypeOf(obj);
}
}
console.log(findGetter(obj2, "foo")); // [Function: get foo]
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__lookupGetter__> |