Baseline Widely available
Promise[Symbol.species]
ã¢ã¯ã»ãµã¼ããããã£ã¯ããããã¹ã®ã¡ã½ããããã®è¿å¤ãæ§ç¯ããã®ã«ä½¿ç¨ãããã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãã
è¦å: Symbol.species
ãåå¨ããã¨ãä»»æã®ã³ã¼ãã®å®è¡ãå¯è½ã«ãªããã»ãã¥ãªãã£ä¸ã®èå¼±æ§ãçã¿åºãå¯è½æ§ãããã¾ããã¾ããç¹å®ã®æé©åãé常ã«é£ãããªãã¾ããã¨ã³ã¸ã³ã®å®è£
è
ã¯ãã®æ©è½ãåé¤ãããã©ãã調æ»ãã¦ãã¾ããå¯è½ã§ããã°ããã®æ©è½ã«é ¼ããã¨ã¯é¿ãã¦ãã ããã
get [Symbol.species]
ãå¼ã³åºãããã³ã³ã¹ãã©ã¯ã¿ã¼ (this
) ã®å¤ã§ãããã®è¿å¤ã¯ãæ°ãããããã¹ã使ãããããã¹é£éã¡ã½ããããè¿å¤ã使ããããã«ä½¿ç¨ããã¾ãã
[Symbol.species]
ã¢ã¯ã»ãµã¼ããããã£ã¯ Promise
ãªãã¸ã§ã¯ãã®æ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãããµãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ããã䏿¸ããã¦ã³ã³ã¹ãã©ã¯ã¿ã¼ã®å²ãå½ã¦ã夿´ãããã¨ãã§ãã¾ããæ¢å®ã®å®è£
ã§ã¯ãåºæ¬çã«æ¬¡ã®ããã«ãªãã¾ãã
// 解説ã®ããæ¶ç©ºã®åºç¤å®è£
class Promise {
static get [Symbol.species]() {
return this;
}
}
ãã®å¤ç¸çãªå®è£
ã®ãããæ´¾çãããµãã¯ã©ã¹ã® [Symbol.species]
ãæ¢å®ã§ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼èªèº«ãè¿ããã¨ã«ãªãã¾ãã
class SubPromise extends Promise {}
SubPromise[Symbol.species] === SubPromise; // true
ãããã¹é£éã¡ã½ããã§ãã then()
ãcatch()
ãfinally()
ã¯ãæ°ãããããã¹ãªãã¸ã§ã¯ããè¿ãã¾ããããã㯠this.constructor[Symbol.species]
ãä»ãã¦æ°ãããããã¹ãæ§ç¯ããããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãåå¾ãã¾ãã this.constructor
ã undefined
ã®å ´åãã¾ã㯠this.constructor[Symbol.species]
ã undefined
ã¾ã㯠null
ã®å ´åãæ¢å®ã® Promise()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ããã¾ãããã以å¤ã®å ´åã¯ã this.constructor[Symbol.species]
ããè¿ãããã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ãããæ°ãããããã¹ãªãã¸ã§ã¯ããæ§ç¯ããã¾ãã
Symbol.species
ããããã£ã¯ãæ¢å®ã§ã¯ Promise
ã®ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãè¿ãã¾ãã
Promise[Symbol.species]; // [Function: Promise]
æ´¾çãªãã¸ã§ã¯ãã® species
MyPromise
ã®ãããªç¬èªã® Promise
ãµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ã MyPromise
ã³ã³ã¹ãã©ã¯ã¿ã¼ã MyPromise
ã® species ã¨ãªãã¾ããããããæ´¾çã¯ã©ã¹ã®ã¡ã½ããã§è¦ªã® Promise
ãªãã¸ã§ã¯ããè¿ãããã«ãããããªã¼ãã¼ã©ã¤ããããå ´åãããããããã¾ããã
class MyPromise extends Promise {
// MyPromise ã® species ã親㮠Promise ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ä¸æ¸ããã
static get [Symbol.species]() {
return Promise;
}
}
æ¢å®ã§ã¯ããããã¹ã¡ã½ããã¯ãµãã¯ã©ã¹ã®åãæã¤ãããã¹ãè¿ãã¾ãã
class MyPromise extends Promise {
someValue = 1;
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // 1
[Symbol.species]
ã䏿¸ããããã¨ã§ããããã¹ã®ã¡ã½ããã¯åºåºã® Promise
åãè¿ããã¨ã«ãªãã¾ãã
class MyPromise extends Promise {
someValue = 1;
static get [Symbol.species]() {
return Promise;
}
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // 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