Object.defineProperties()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Object.defineProperties() éææ¹æ³ç´æ¥å¨ä¸ä¸ªå¯¹è±¡ä¸å®ä¹æ°ç屿§æä¿®æ¹ç°æå±æ§ï¼å¹¶è¿å该对象ã
å°è¯ä¸ä¸
const object1 = {};
Object.defineProperties(object1, {
property1: {
value: 42,
writable: true,
},
property2: {},
});
console.log(object1.property1);
// Expected output: 42
è¯æ³
Object.defineProperties(obj, props)
åæ°
obj-
å¨å ¶ä¸å®ä¹æä¿®æ¹å±æ§ç对象ã
props-
ä¸ä¸ªå¯¹è±¡ï¼å ¶ä¸æ¯ä¸ªé®è¡¨ç¤ºè¦å®ä¹æä¿®æ¹ç屿§çåç§°ï¼æ¯ä¸ªå¼æ¯æè¿°è¯¥å±æ§ç对象ãå¨
propsä¸çæ¯ä¸ªå¼å¿ é¡»æ¯ä¸åªè½æ¯æ°æ®æè¿°ç¬¦æè®¿é®å¨æè¿°ç¬¦ä¹ä¸ï¼ä¸è½åæ¶ä¸ºä¸¤è ï¼æ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åè§Object.defineProperty()ï¼ãæ°æ®æè¿°ç¬¦å访é®å¨æè¿°ç¬¦å¯ä»¥å å«ä»¥ä¸å¯éé®ï¼
configurable-
妿æ¤å±æ§æè¿°ç¬¦çç±»åå¯ä»¥æ´æ¹å¹¶ä¸å±æ§å¯ä»¥ä»ç¸åºç对象ä¸å é¤ï¼å为
trueãé»è®¤ä¸ºfalseã enumerable-
妿æ¤å±æ§å¨æä¸¾ç¸åºå¯¹è±¡ç屿§æ¶åºæ¾ç¤ºåºæ¥ï¼å为
trueãé»è®¤ä¸ºfalseã
æ°æ®æè¿°ç¬¦è¿å ·æä»¥ä¸å¯éé®ï¼
value-
ä¸å±æ§å ³èçå¼ãå¯ä»¥æ¯ä»»ä½ææç JavaScript å¼ï¼æ°åã对象ã彿°çï¼ãé»è®¤ä¸º
undefinedã writable-
妿ä¸å±æ§å ³èçå¼å¯ä»¥ä½¿ç¨èµå¼è¿ç®ç¬¦æ´æ¹ï¼å为
trueãé»è®¤ä¸ºfalseã
访é®å¨æè¿°ç¬¦è¿å ·æä»¥ä¸å¯éé®ï¼
get-
ä½ä¸ºè¯¥å±æ§ç getter 彿°ï¼å¦ææ²¡æ getter å为
undefinedã彿°è¿åå¼å°è¢«ç¨ä½å±æ§çå¼ãé»è®¤ä¸ºundefinedã set-
ä½ä¸ºè¯¥å±æ§ç setter 彿°ï¼å¦ææ²¡æ setter å为
undefinedãè¯¥å½æ°å°åªæ¥æ¶ä¸ä¸ªåæ°ï¼å³è¢«åé ç»å±æ§çæ°å¼ãé»è®¤ä¸ºundefinedã
妿ä¸ä¸ªå±æ§æè¿°ç¬¦æ²¡æ
valueãwritableãgetãseté®ä¸çä»»ä½ä¸ä¸ªï¼é£ä¹å®è¢«è§ä¸ºä¸ä¸ªæ°æ®æè¿°ç¬¦ã妿ä¸ä¸ªå±æ§æè¿°ç¬¦åæ¶å ·ævalueæwritableågetæseté®ä¸çä»»æä¸ä¸ªç»åï¼å°±ä¼æåºå¼å¸¸ã
è¿åå¼
ä¼ éç»å½æ°ç对象ã
示ä¾
>ä½¿ç¨ Object.defineProperties
const obj = {};
Object.defineProperties(obj, {
property1: {
value: true,
writable: true,
},
property2: {
value: "Hello",
writable: false,
},
// ççâ¦â¦
});
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.defineproperties> |