Baseline 2025
Newly available
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
Iterator()
æé 彿°æ¨å¨ç¨ä½å建è¿ä»£å¨çå
¶ä»ç±»çè¶
ç±»ãå®å¨æ¬èº«è¢«æé æ¶ä¼æåºé误ã
夿³¨ï¼ Iterator()
åªè½éè¿ new
æé ãå°è¯ä¸å¸¦ new
è°ç¨ä¼æåº TypeError
ãæ¤å¤ï¼Iterator()
å®é
ä¸ä¸è½è¢«æé ï¼å
¶é常æ¯éè¿ super()
è°ç¨å¨åç±»çæé 彿°ä¸é弿é çã
æ ã
è¿åå¼ä¸ä¸ªæ°ç Iterator
对象ã
TypeError
å½ new.target
æ¯ Iterator
彿°æ¬èº«æ¶ï¼ä¾å¦å½ Iterator
æé 彿°æ¬èº«è¢«æé æ¶ã
Iterator
代表ä¸ä¸ªæ½è±¡ç±»ââä¸ä¸ªä¸ºå
¶åç±»æä¾éç¨å·¥å
·æ¹æ³çç±»ï¼ä½å
¶æ¬èº«å¹¶ä¸ç¨äºå®ä¾åã宿¯ææå
¶ä»è¿ä»£å¨ç±»çè¶
ç±»ï¼ç¨äºå建å®ç°ç¹å®è¿ä»£ç®æ³çåç±»ââå³ï¼Iterator
çææåç±»å¿
é¡»æç
§è¿ä»£å¨åè®®çè¦æ±å®ç° next()
æ¹æ³ãç±äº Iterator
æ¬èº«å¹¶ä¸æä¾ next()
æ¹æ³ï¼å æ¤ç´æ¥æé Iterator
å¹¶ä¸åçã
ä½ ä¹å¯ä»¥ä½¿ç¨ Iterator.from()
æ¥ä»ä¸ä¸ªç°æçå¯è¿ä»£å¯¹è±¡æè¿ä»£å¨å¯¹è±¡å建ä¸ä¸ª Iterator
å®ä¾ã
以ä¸ç¤ºä¾å®ä¹äºä¸ä¸ªå
许è¿ä»£çèªå®ä¹æ°æ®ç»æââRange
ã使ä¸ä¸ªå¯¹è±¡å¯è¿ä»£æç®åçæ¹æ³æ¯æä¾ä¸ä¸ªçæå¨å½æ°çå½¢å¼ç [Symbol.iterator]()
æ¹æ³ï¼
class Range {
#start;
#end;
#step;
constructor(start, end, step = 1) {
this.#start = start;
this.#end = end;
this.#step = step;
}
*[Symbol.iterator]() {
for (let value = this.#start; value <= this.#end; value += this.#step) {
yield value;
}
}
}
const range = new Range(1, 5);
for (const num of range) {
console.log(num);
}
ä¸é¢çä»£ç æ¯å¯è¡çï¼ä½å®ä¸å¦å ç½®çè¿ä»£å¨ãæä¸¤ä¸ªé®é¢ï¼
Generator
ï¼è¿æå³ç对 Generator.prototype
çä¿®æ¹å°ä¼å½±åè¿åçè¿ä»£å¨ï¼è¿æ¯ä¸ç§æ½è±¡æ³æ¼ãæä»¬å¯ä»¥éè¿ç»§æ¿ Iterator
æ¥æ¨¡ä»¿å
ç½®è¿ä»£å¨ï¼ä¾å¦ map è¿ä»£å¨çå®ç°ãè¿ä½¿å¾æä»¬å¯ä»¥å®ä¹é¢å¤ç屿§ï¼ä¾å¦ [Symbol.toStringTag]
ï¼åæ¶ä½¿å¾è¿ä»£å¨è¾
婿¹æ³å¯¹è¿åçè¿ä»£å¨å¯ç¨ã
class Range {
#start;
#end;
#step;
constructor(start, end, step = 1) {
this.#start = start;
this.#end = end;
this.#step = step;
}
static #RangeIterator = class extends Iterator {
#cur;
#s;
#e;
constructor(range) {
super();
this.#cur = range.#start;
this.#s = range.#step;
this.#e = range.#end;
}
static {
Object.defineProperty(this.prototype, Symbol.toStringTag, {
value: "Range Iterator",
configurable: true,
enumerable: false,
writable: false,
});
// é¿å
#RangeIterator 被å¤é¨è®¿é®
delete this.prototype.constructor;
}
next() {
if (this.#cur > this.#e) {
return { value: undefined, done: true };
}
const res = { value: this.#cur, done: false };
this.#cur += this.#s;
return res;
}
};
[Symbol.iterator]() {
return new Range.#RangeIterator(this);
}
}
const range = new Range(1, 5);
for (const num of range) {
console.log(num);
}
è¿ç§ç»§æ¿æ¨¡å¼å¯¹äºå建许å¤èªå®ä¹è¿ä»£å¨å¾æç¨ãå¦æä½ æä¸ä¸ªç°æçå¯è¿ä»£å¯¹è±¡æè¿ä»£å¨å¯¹è±¡ï¼å®æ²¡æç»§æ¿èª Iterator
ï¼èä½ åªæ³å¨å®ä¸è°ç¨è¿ä»£å¨è¾
婿¹æ³ï¼é£ä¹ä½ å¯ä»¥å¯ä»¥ä½¿ç¨ Iterator.from()
æ¥åå»ºä¸æ¬¡æ§ç Iterator
å®ä¾ã
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