Baseline Widely available
get
èªæ³æå°ç©ä»¶å±¬æ§ï¼ç¶å®å°å±¬æ§è¢«æª¢ç´¢æï¼æå¼å«çå½å¼ã
const obj = {
log: ["a", "b", "c"],
get latest() {
return this.log[this.log.length - 1];
},
};
console.log(obj.latest);
// Expected output: "c"
èªæ³
{get prop() { ... } } {get [expression]() { ... } }忏
prop
è¦ç¶å®å°çµ¦å®å½å¼çå稱ã
èª ECMAScript 2015 éå§ï¼å¯ä»¥ç¨è¨ç®å±¬æ§å稱ï¼computed property nameï¼ï¼ç¶å®å°çµ¦å®å½å¼ã
ææåï¼ç©ä»¶ç屬æ§å¯è½éè¦åå³åæ æ¸å¼ãæè¦å¨ä¸ä½¿ç¨æç¢ºçæ¹æ³å¼å«ä¸ï¼åæ åºå §é¨è®æ¸ççæ ãå¨ JavaScript å¯ä»¥ç¨ getter éå°éåç®çãå管å¯ä»¥ç¨ getter è setter çéè¯å»ºç«èæ¬å±¬æ§çé¡åï¼ä½ getter ç¡æ³è¢«ç¶å®å°åæææå¯¦éæ¸å¼ç屬æ§ã
ä½¿ç¨ get
èªæ³æï¼è«æ³¨æä»¥ä¸æ
æ³ï¼
get
ç object literalãæç¸å屬æ§å
¥å£ï¼data entryï¼ç data å½¢å¼åºç¾ï¼ä¸è½ä½¿ç¨ { get x() { }, get x() { } }
and { x: ..., get x() { } }
ï¼ãgetter å¯ä»¥ç¨ delete
æä½ç¬¦ç§»é¤ã
éç¨å¼ç¢¼å°çµ¦ obj
ç©ä»¶å»ºç«èæ¬å±¬æ§ latest
ï¼å®æåå³ log
é£åçæå¾ä¸åå®å
ã
var obj = {
log: ["example", "test"],
get latest() {
if (this.log.length == 0) return undefined;
return this.log[this.log.length - 1];
},
};
console.log(obj.latest); // "test".
è«æ³¨æ latest
䏿å çºæ¸å¼è¢«ææ´¾èæ¹è®ã
delete
æä½ç¬¦ç§»é¤ getter
妿æ³ç§»é¤ getterï¼å¯ä»¥ä½¿ç¨ delete
宿ä¹ï¼
defineProperty
çµ¦ç¾æç©ä»¶å®ç¾© getter
è¥æ³å¨ä»»ä½æåçµ¦ç¾æç©ä»¶æ·»å¢ getterï¼è«ä½¿ç¨ Object.defineProperty()
ã
var o = { a: 0 };
Object.defineProperty(o, "b", {
get: function () {
return this.a + 1;
},
});
console.log(o.b); // Runs the getter, which yields a + 1 (which is 1)
使ç¨è¨ç®å±¬æ§å
var expr = "foo";
var obj = {
get [expr]() {
return "bar";
},
};
console.log(obj.foo); // "bar"
Smart / self-overwriting / lazy getters
Getter æä¾äºå®ç¾©ç©ä»¶å±¬æ§çæ¹æ³ï¼ä½å®æ¬èº«ä¸¦ä¸æå»èªåè¨ç®ï¼ç´å°æ³è¨ªåå®ãé¤ééè¦ç¨ getterï¼å¦åæ¸å¼è¨ç®æè¢«å»¶ç·©ï¼å¦æä¸éè¦ç¨å° getterï¼é£å°±æ°¸é ç¡é æ¯ä»è¨ç®çéé·ã
éå°å±¬æ§å¼ lazy æ delayã並æ«å以ç使ªä¾è¨ªåçæä½³åæå·§ç¨±ä½ smart æ memoized getterï¼å次è¨ç®ææå¼å« getterãæ¥è被æ«å以便å¨ä¸éç®çæ æ³ä¸åå¾çºè¨ªåãé種æå·§å¨ä»¥ä¸æ æ³ææ´¾ä¸ç¨å ´ï¼
ä¹å°±æ¯èªªï¼åºæ¼ getter 䏿鿰è¨ç®ççç±ï¼ä¸è¦éå°æ¸å¼é æææ¹è®ç屬æ§ï¼ä½¿ç¨ lazy getterã
ä¸ä¾çç©ä»¶ææä½çºèªå·±ç屬æ§ç getterãå¨åå¾è©²å±¬æ§å¾ï¼å®æå¾ç©ä»¶è¢«ç§»é¤ã並以é±å¼æ¸å¼å±¬æ§éæ°å¢å ãæå¾åå³ä¹ã
get notifier() {
delete this.notifier;
return this.notifier = document.getElementById('bookmarked-notification-anchor');
},
éå° Firefox ç¨å¼ç¢¼ï¼å¦è«åè¦å®ç¾© defineLazyGetter()
å½å¼ç XPCOMUtils.jsm ç¨å¼æ¨¡å¡ã
get
è defineProperty
å¨ä½¿ç¨ classes
æï¼å管 get
ééµåè Object.defineProperty()
æåºç¾ç¸åçµæï¼ä½å
¶ä¸æå¾®å¦çå·®ç°ã
å¨ä½¿ç¨ get
æï¼å±¬æ§æå¨ç©ä»¶çåå被å®ç¾©ï¼èå¨ä½¿ç¨ Object.defineProperty()
æï¼å±¬æ§æå¨è¢«å¥ç¨ç實ä¾å
§å®ç¾©ã
class Example {
get hello() {
return "world";
}
}
const obj = new Example();
console.log(obj.hello);
// "world"
console.log(Object.getOwnPropertyDescriptor(obj, "hello"));
// undefined
console.log(
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), "hello"),
);
// { configurable: true, enumerable: false, get: function get hello() { return 'world'; }, set: undefined }
è¦ç¯ ç覽å¨ç¸å®¹æ§ åè¦
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4