Object.getOwnPropertyDescriptors()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2017å¹´4æ.
Object.getOwnPropertyDescriptors() ã¯éçã¡ã½ããã§ãæå®ãããªãã¸ã§ã¯ãã®ãã¹ã¦ã®ããããã£è¨è¿°åãè¿ãã¾ãã
試ãã¦ã¿ã¾ããã
const object = {
foo: 42,
};
const descriptors = Object.getOwnPropertyDescriptors(object);
console.log(descriptors.foo.writable);
// äºæ³ãããçµæ: true
console.log(descriptors.foo.value);
// äºæ³ãããçµæ: 42
æ§æ
Object.getOwnPropertyDescriptors(obj)
弿°
obj-
ãã¹ã¦ã®ããããã£è¨è¿°åãåå¾ãããªãã¸ã§ã¯ãã
è¿å¤
ãªãã¸ã§ã¯ãã®ãã¹ã¦ã®ããããã£è¨è¿°åãå«ããªãã¸ã§ã¯ããããããã£ããªãå ´åã空ãªãã¸ã§ã¯ãã®å¯è½æ§ãããã
説æ
ãã®ã¡ã½ããã¯ããªãã¸ã§ã¯ãã®ãã¹ã¦ã®ç¬èªã®ããããã£ã®æ£ç¢ºãªè¨è¿°ã®æ¤æ»ãå¯è½ã«ãã¾ãã JavaScript ã§ã¯ãããããã£ã¯æååå¤ã«ããååã¾ã㯠Symbol ã¨ããããã£è¨è¿°åã§æ§æããã¦ãã¾ããããããã£è¨è¿°åã®åã¨å±æ§ã«ã¤ãã¦ã®è©³ç´°æ
å ±ã¯ãObject.defineProperty() ã§ç¢ºèªãã¦ãã ããã
ããããã£è¨è¿°å ã¯ã次ã®å±æ§ã®ããã¤ããæã¡ã¾ãã
value-
ããããã£ã«é¢é£ã¥ããããå¤ã§ãï¼ãã¼ã¿è¨è¿°åã®ã¿ï¼ã
writable-
trueã§ããå ´åãããããã£ã«é¢é£ã¥ããããå¤ã¯å¤æ´ãããã¨ãã§ãã¾ãï¼ãã¼ã¿è¨è¿°åã®ã¿ï¼ã get-
ããããã£ã®ã²ãã¿ã¼ã¨ãã¦æä¾ãã颿°ããããã¯ã²ãã¿ã¼ããªãå ´åã¯
undefinedã§ãï¼ã¢ã¯ã»ãµã¼è¨è¿°åã®ã¿ï¼ã set-
ããããã£ã®ã»ãã¿ã¼ã¨ãã¦æä¾ãã颿°ããããã¯ã»ãã¿ã¼ããªãå ´åã¯
undefinedã§ãï¼ã¢ã¯ã»ãµã¼è¨è¿°åã®ã¿ï¼ã configurable-
trueã§ããå ´åããã®ç¨®ã®è¨è¿°åã夿´ãããã¨ãã対å¿ãããªãã¸ã§ã¯ãããããããã£ãåé¤ãããã¨ãã§ãã¾ãã enumerable-
trueã§ããå ´åããã®ããããã£ã¯å¯¾å¿ãããªãã¸ã§ã¯ãã§ã®ããããã£åæã«ç¾ãã¾ãã
ä¾
>ã·ã£ãã¼ã³ãã¼ã®çæ
Object.assign() ã¡ã½ããã¯ãã½ã¼ã¹ãªãã¸ã§ã¯ããã対象ã®ãªãã¸ã§ã¯ãã«å¯¾ãã¦åæå¯è½ãã¤èªèº«ã®ããããã£ã®ã¿ã³ãã¼ã§ãã䏿¹ã2 ã¤ã®æªç¥ã®ãªãã¸ã§ã¯ãéã®ã·ã£ãã¼ã³ãã¼ã®ããã«ããã®ã¡ã½ãã㨠Object.create() ã使ç¨ã§ãã¾ãã
Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj),
);
ãµãã¯ã©ã¹ã®ä½æ
ãµãã¯ã©ã¹ã使ããéå¸¸ã®æ¹æ³ã¯ããµãã¯ã©ã¹ãå®ç¾©ãããã®ãããã¿ã¤ããã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã«è¨å®ãããã®ã¤ã³ã¹ã¿ã³ã¹ã«ããããã£ãå®ç¾©ãããã¨ã§ããããã¯ç¹ã«ã»ãã¿ã¼ãã²ãã¿ã¼ãç¡éª¨ã«ãªããã¨ãããã¾ãã代ããã«ããããã¿ã¤ããè¨å®ããããã«ãã®ã³ã¼ãã使ç¨ãããã¨ãã§ãã¾ãã
function superclass() {}
superclass.prototype = {
// ããã§ superclass ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãã¡ã½ãããããããã£ãå®ç¾©
};
function subclass() {}
subclass.prototype = Object.create(superclass.prototype, {
// ããã§ subclass ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãã¡ã½ãããããããã£ãå®ç¾©
});
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.getownpropertydescriptors> |