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