Object.prototype.__defineGetter__()
å·²å¼ç¨: ä¸åæ¨è使ç¨è¯¥ç¹æ§ãè½ç¶ä¸äºæµè§å¨ä»ç¶æ¯æå®ï¼ä½ä¹è®¸å·²ä»ç¸å ³ç web æ åä¸ç§»é¤ï¼ä¹è®¸æ£åå¤ç§»é¤æåºäºå ¼å®¹æ§èä¿çã请尽éä¸è¦ä½¿ç¨è¯¥ç¹æ§ï¼å¹¶æ´æ°ç°æç代ç ï¼åè§æ¬é¡µé¢åºé¨çå ¼å®¹æ§è¡¨æ ¼ä»¥æå¯¼ä½ ä½åºå³å®ã请注æï¼è¯¥ç¹æ§éæ¶å¯è½æ æ³æ£å¸¸å·¥ä½ã
夿³¨ï¼æ¤ç¹æ§å·²å¼ç¨ï¼å»ºè®®ä½¿ç¨å¯¹è±¡åå§åè¯æ³æ Object.defineProperty() API æ¥å®ä¹ getterãè¯¥æ¹æ³çè¡ä¸ºåªé对 Web å
¼å®¹æ§è¿è¡äºè§å®ï¼å¨ä»»ä½å¹³å°ä¸é½ä¸éè¦å®ç°è¯¥æ¹æ³ãå®å¯è½æ æ³å¨ææå°æ¹æ£å¸¸å·¥ä½ã
__defineGetter__() æ¹æ³å°ä¸ä¸ªå¯¹è±¡ç屿§ç»å®å°ä¸ä¸ªå½æ°ä¸ï¼å½è¯¥å±æ§è¢«è®¿é®æ¶ï¼è¯¥å½æ°å°è¢«è°ç¨ã
è¯æ³
__defineGetter__(prop, func)
åæ°
è¿åå¼
undefinedã
å¼å¸¸
TypeError-
妿
func䏿¯å½æ°ï¼åæåºã
æè¿°
ææç»§æ¿èª Object.prototype ç对象ï¼ä¹å°±æ¯é¤äº null åå对象ç对象ï¼é½ä¼ç»§æ¿ __defineGetter__() æ¹æ³ãè¯¥æ¹æ³å
许å¨ä¸ä¸ªå·²åå¨ç对象ä¸å®ä¹ä¸ä¸ª getterãè¿ç¸å½äºä½¿ç¨ Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }) æ¹æ³ï¼è¿æå³çè¯¥å±æ§æ¯å¯æä¸¾åå¯é
ç½®çï¼èä¸å¦æåå¨ï¼åä¿çä»»ä½ç°æç setterã
__defineGetter__() å¨è§èä¸è¢«å®ä¹ä¸ºâå¯éè§èâï¼è¿æå³çä¸éè¦ä»»ä½å®ç°æ¥å®ç°å®ãç¶èï¼ææä¸»è¦çæµè§å¨é½å®ç°äºå®ï¼å¹¶ä¸ç±äºå®çæç»ä½¿ç¨ï¼å®ä¸å¤ªå¯è½è¢«å é¤ã妿ä¸ä¸ªæµè§å¨å®ç°äº __defineGetter__()ï¼é£ä¹å®è¿éè¦å®ç° __lookupGetter__()ã__lookupSetter__() å __defineSetter__() æ¹æ³ã
示ä¾
>ä½¿ç¨ __defineGetter__()
const o = {};
o.__defineGetter__("gimmeFive", function () {
return 5;
});
console.log(o.gimmeFive); // 5
以æ åæ¹å¼å®ä¹ getter 屿§
å¨å¯¹è±¡é¦æ¬¡åå§åæ¶ï¼ä½ å¯ä»¥ä½¿ç¨ get è¯æ³æ¥å®ä¹ä¸ä¸ª getterã
const o = {
get gimmeFive() {
return 5;
},
};
console.log(o.gimmeFive); // 5
ä½ ä¹å¯ä»¥ä½¿ç¨ Object.defineProperty() å¨å¯¹è±¡å建å为å
¶å®ä¹ä¸ä¸ª getterãä¸ __defineGetter__() ç¸æ¯ï¼æ¤æ¹æ³å
è®¸ä½ æ§å¶ getter ç坿䏾æ§åå¯é
ç½®æ§ï¼ä»¥åå®ä¹ Symbol 屿§ãObject.defineProperty() æ¹æ³ä¹éç¨äº null åå对象ï¼å 为ä»ä»¬æ²¡æç»§æ¿ Object.prototypeï¼æä»¥æ²¡æ __defineGetter__() æ¹æ³ã
const o = {};
Object.defineProperty(o, "gimmeFive", {
get() {
return 5;
},
configurable: true,
enumerable: true,
});
console.log(o.gimmeFive); // 5
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__defineGetter__> |
æµè§å¨å ¼å®¹æ§
åè§
core-jsä¸Object.prototype.__defineGetter__ç polyfillObject.prototype.__defineSetter__()getè¯æ³Object.defineProperty()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()- JS æåï¼å®ä¹ Getter å Setter
- [åæ] __defineGetter__ å __defineSetter__ 已被å¼ç¨
- Firefox bug 647423