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 å¼å§ï¼è¿å¯ä»¥ä½¿ç¨ä¸ä¸ªè®¡ç®å±æ§åç表达å¼ç»å®å°ç»å®ç彿°ã
ææ¶éè¦å 许访é®è¿åå¨æè®¡ç®å¼ç屿§ï¼æè ä½ å¯è½éè¦åæ å é¨åéçç¶æï¼èä¸éè¦ä½¿ç¨æ¾å¼æ¹æ³è°ç¨ãå¨ JavaScript ä¸ï¼å¯ä»¥ä½¿ç¨ getter æ¥å®ç°ã
尽管å¯ä»¥ç»åä½¿ç¨ getter å setter æ¥å建ä¸ä¸ªä¼ªå±æ§ï¼ä½æ¯ä¸å¯è½åæ¶å°ä¸ä¸ª getter ç»å®å°ä¸ä¸ªå±æ§å¹¶ä¸è¯¥å±æ§å®é ä¸å ·æä¸ä¸ªå¼ã
使ç¨get
è¯æ³æ¶åºæ³¨æä»¥ä¸é®é¢ï¼
get
æå
·æç¸å屿§çæ°æ®æ¡ç®åæ¶åºç°å¨ä¸ä¸ªå¯¹è±¡åé¢éä¸ï¼ä¸å
è®¸ä½¿ç¨ { get x() { }, get x() { } }
å { x: ..., get x() { } }
ï¼ãè¿ä¼ä¸ºobj
å建ä¸ä¸ªä¼ªå±æ§latest
ï¼å®ä¼è¿ålog
æ°ç»çæåä¸ä¸ªå
ç´ ã
const 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
åªéä½¿ç¨ delete
ï¼å°±å¯å é¤ getterï¼
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"
æºè½ / èªæå¤å/ æå è½½ getters
Getters ç»ä½ ä¸ç§æ¹æ³æ¥å®ä¹ä¸ä¸ªå¯¹è±¡ç屿§ï¼ä½æ¯å¨è®¿é®å®ä»¬ä¹åä¸ä¼è®¡ç®å±æ§çå¼ãgetter å»¶è¿è®¡ç®å¼çææ¬ï¼ç´å°éè¦æ¤å¼ï¼å¦æä¸éè¦ï¼ä½ å°±ä¸ç¨æ¯ä»ææ¬ã
ä¸ç§é¢å¤çä¼åææ¯æ¯ç¨æºè½ (æç§°è®°å¿å)getters å»¶è¿å±æ§å¼ç计ç®å¹¶å°å ¶ç¼å以å¤ä»¥å访é®ãè¯¥å¼æ¯å¨ç¬¬ä¸æ¬¡è°ç¨ getter æ¶è®¡ç®çï¼ç¶å被ç¼åï¼å æ¤åç»è®¿é®è¿åç¼åå¼èä¸éæ°è®¡ç®å®ãè¿å¨ä»¥ä¸æ åµä¸å¾æç¨ï¼
夿³¨ï¼ è¿æå³çä½ ä¸åºè¯¥ä¸ºä½ å¸ææ´æ¹å ¶å¼ç屿§ä½¿ç¨æ getterï¼å 为 getter ä¸ä¼éæ°è®¡ç®è¯¥å¼ã
å¨ä»¥ä¸ç¤ºä¾ä¸ï¼å¯¹è±¡å ·æä¸ä¸ª getter 屿§ãå¨è·å屿§æ¶ï¼è¯¥å±æ§å°ä»å¯¹è±¡ä¸å é¤å¹¶éæ°æ·»å ï¼ä½æ¤æ¶å°é弿¾ç¤ºä¸ºæ°æ®å±æ§ãæåè¿åå¾å°å¼ã
get notifier() {
delete this.notifier;
return this.notifier = document.getElementById('bookmarked-notification-anchor');
},
å¯¹äº Firefox 代ç ï¼å¦è¯·åé
å®ä¹defineLazyGetter()
彿°çXPCOMUtils.jsm
ä»£ç æ¨¡åã
get
vs. defineProperty
å½ä½¿ç¨ get
å
³é®åæ¶ï¼å®åObject.defineProperty()
æç±»ä¼¼çææï¼å¨classes
ä¸ä½¿ç¨æ¶ï¼äºè
æç»å¾®çå·®å«ã
å½ä½¿ç¨ 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