Baseline Widely available *
WeakSet
æ¯å¯è¢«åå¾åæ¶çå¼çéåï¼å
æ¬å¯¹è±¡åéå
¨å±æ³¨åç符å·ãWeakSet
ä¸çå¼åªè½åºç°ä¸æ¬¡ãå®å¨ WeakSet
çéå䏿¯å¯ä¸çã
WeakSet ä¸çå¼ä¸å®æ¯å¯è¢«åå¾åæ¶çå¼ã大夿°åå§æ°æ®ç±»åå¯ä»¥è¢«ä»»æå°å建ï¼å¹¶ä¸æ²¡æçå½å¨æï¼æä»¥å®ä»¬ä¸è½è¢«åå¨ã对象åéå ¨å±æ³¨åç符å·å¯ä»¥è¢«åå¨ï¼å 为å®ä»¬æ¯å¯è¢«åå¾åæ¶çå¼ã
å®å Set
对象ç主è¦åºå«æï¼
WeakSet
åªè½æ¯å¯¹è±¡å符å·çéåï¼å®ä¸è½å Set
飿 ·å
å«ä»»ä½ç±»åçä»»æå¼ã
WeakSet
æå¼±å¼ç¨ï¼WeakSet
ä¸å¯¹è±¡çå¼ç¨ä¸ºå¼±å¼ç¨ãå¦ææ²¡æå
¶ä»ç对 WeakSet
ä¸å¯¹è±¡çå¼ç¨åå¨ï¼é£ä¹è¿äºå¯¹è±¡ä¼è¢«åå¾åæ¶ã
夿³¨ï¼ è¿ä¹æå³çéå䏿²¡æåå¨å½åå¼çå表ãWeakSet
æ¯ä¸å¯æä¸¾çã
éå½è°ç¨èªèº«ç彿°éè¦ä¸ç§éè¿è·è¸ªåªäºå¯¹è±¡å·²è¢«å¤çï¼æ¥åºå¯¹å¾ªç¯æ°æ®ç»æçæ¹æ³ã
为æ¤ï¼WeakSet
é常éåå¤çè¿ç§æ
åµï¼
// å¯¹ä¼ å
¥ç subject 对象å
é¨åå¨çææå
容æ§è¡åè°
function execRecursively(fn, subject, _refs = new WeakSet()) {
// é¿å
æ ééå½
if (_refs.has(subject)) {
return;
}
fn(subject);
if (typeof subject === "object") {
_refs.add(subject);
for (const key in subject) {
execRecursively(fn, subject[key], _refs);
}
}
}
const foo = {
foo: "Foo",
bar: {
bar: "Bar",
},
};
foo.bar.baz = foo; // 循ç¯å¼ç¨ï¼
execRecursively((obj) => console.log(obj), foo);
卿¤ï¼å¨ç¬¬ä¸æ¬¡è¿è¡æ¶å建 WeakSet
ï¼å¹¶å°å
¶ä¸æ¯ä¸ªåç»å½æ°è°ç¨ä¸èµ·ä¼ éï¼ä½¿ç¨å
é¨åæ° _refs
ï¼ã
å¯¹è±¡çæ°éæå®ä»¬çéåé¡ºåºæ å
³ç´§è¦ï¼å æ¤ï¼WeakSet
æ¯ Set
æ´éåï¼åæ§è¡ï¼è·è¸ªå¯¹è±¡å¼ç¨ï¼å°¤å
¶æ¯å¨æ¶å大é对象æ¶ã
WeakSet()
å建ä¸ä¸ªæ°ç WeakSet
对象ã
è¿äºå±æ§å¨ WeakSet.prototype
ä¸å®ä¹ï¼å¹¶ä¸ç±ææ WeakSet
å®ä¾æå
±äº«ã
WeakSet.prototype.constructor
å建äºè¯¥å®ä¾å¯¹è±¡çæé 彿°ãå¯¹äº WeakSet
å®ä¾ï¼åå§å¼æ¯ WeakSet
æé 彿°ã
WeakSet.prototype[Symbol.toStringTag]
[Symbol.toStringTag]
屿§çåå§å¼æ¯å符串 "WeakSet"
ãè¯¥å±æ§è¢« Object.prototype.toString()
æä½¿ç¨ã
WeakSet.prototype.add()
å° value
追å å° WeakSet
对象ã
WeakSet.prototype.delete()
ä» WeakSet
ä¸ç§»é¤ value
ãæ¤åè°ç¨ WeakSet.prototype.has(value)
å°è¿å false
ã
WeakSet.prototype.has()
è¿åä¸ä¸ªè¡¨ç¤º value
æ¯å¦åå¨äº WeakSet
对象ä¸çå¸å°å¼ã
const ws = new WeakSet();
const foo = {};
const bar = {};
ws.add(foo);
ws.add(bar);
ws.has(foo); // true
ws.has(bar); // true
ws.delete(foo); // ä» set ä¸å é¤ foo 对象
ws.has(foo); // falseï¼foo 对象已ç»è¢«å é¤äº
ws.has(bar); // trueï¼bar ä¾ç¶åå¨
注æï¼foo !== bar
ã尽管å®ä»¬æ¯ç¸ä¼¼ç对象ï¼ä½æ¯å®ä»¬ä¸æ¯åä¸ä¸ªå¯¹è±¡ãå æ¤ï¼å®ä»¬é½å¯ä»¥è¢«å å
¥å°éåä¸ã
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