Baseline Widely available
Array[Symbol.species]
éçã¢ã¯ã»ãµã¼ããããã£ã¯ãé
åã®ã¡ã½ããããã®è¿å¤ãæ§ç¯ããã®ã«ä½¿ãããã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãã
è¦å: [Symbol.species]
ãåå¨ãããã¨ã§ãä»»æã®ã³ã¼ããå®è¡ã§ããã»ãã¥ãªãã£ã®èå¼±æ§ãçã¿åºãå¯è½æ§ãããã¾ããã¾ããããç¨®ã®æé©åãé常ã«é£ãããªãã¾ããã¨ã³ã¸ã³ã®å®è£
è
ã¯ãã®æ©è½ãé¤å»ãããã©ããã調æ»ãã¦ãã¾ãã使ç¨å¯è½ã§ããã°ããã®æ©è½ã«é ¼ããã¨ã¯é¿ãã¦ãã ããã toReversed()
ã®ãããªç¾ä»£ã®é
åã¡ã½ãã㯠[Symbol.species]
ã使ç¨ãããå¸¸ã«æ°ãã Array
åºæ¬ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¾ãã
get [Symbol.species]
ãå¼ã³åºãããã³ã³ã¹ãã©ã¯ã¿ã¼ (this
) ã®å¤ã§ãããã®è¿å¤ã¯ãæ°ããé
åã使ããé
åã¡ã½ããã®è¿å¤ã使ããããã«ä½¿ç¨ããã¾ãã
[Symbol.species]
ã¢ã¯ã»ãµã¼ããããã£ã¯ã Array
ãªãã¸ã§ã¯ãã®æ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãããµãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ä»£å
¥ãããã¨ã§ãããããªã¼ãã¼ã©ã¤ããããã¨ãã§ãã¾ããæ¢å®ã®å®è£
ã¯åºæ¬çã«æ¬¡ã®éãã§ãã
// 説æã®ããã®ä»®èª¬çãªå®è£
class Array {
static get [Symbol.species]() {
return this;
}
}
ãã®å¤ç¸çãªå®è£
ã®ããã«ãæ´¾çãããµãã¯ã©ã¹ã® [Symbol.species]
ãæ¢å®å¤ã§ã³ã³ã¹ãã©ã¯ã¿ã¼èªèº«ãè¿ããã¨ã«ãªãã¾ãã
class SubArray extends Array {}
SubArray[Symbol.species] === SubArray; // true
æ¢åã®é
åã夿´ããã«æ°ããé
åã¤ã³ã¹ã¿ã³ã¹ãè¿ãé
åã¡ã½ããï¼ä¾ãã°filter()
ã map()
ï¼ãå¼ã³åºãå ´åãé
åã® constructor[Symbol.species]
ã«ã¢ã¯ã»ã¹ãããã¨ã«ãªãã¾ããè¿ãããã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãé
åã¡ã½ããã®è¿å¤ã使ããããã«ä½¿ç¨ããã¾ããããã«ãããé
åã¡ã½ãããé
åã¨ã¯ç¡é¢ä¿ã®ãªãã¸ã§ã¯ããè¿ãããã«ãããã¨ãæè¡çã«å¯è½ã«ãªãã¾ãã
class NotAnArray {
constructor(length) {
this.length = length;
}
}
const arr = [0, 1, 2];
arr.constructor = { [Symbol.species]: NotAnArray };
arr.map((i) => i); // NotAnArray { '0': 0, '1': 1, '2': 2, length: 3 }
arr.filter((i) => i); // NotAnArray { '0': 1, '1': 2, length: 0 }
arr.concat([1, 2]); // NotAnArray { '0': 0, '1': 1, '2': 2, '3': 1, '4': 2, length: 5 }
ä¾ é常ã®ãªãã¸ã§ã¯ãã® species
[Symbol.species]
ããããã£ã¯ãArray
ãªãã¸ã§ã¯ãã®æ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã§ãã Array
ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãã
Array[Symbol.species]; // [Function: Array]
æ´¾çãªãã¸ã§ã¯ãã® spicies
æ´¾çã³ã¬ã¯ã·ã§ã³ãªãã¸ã§ã¯ãï¼ãã¨ãã°ãç¬èªã®é
åã§ãã MyArray
ï¼ã§ã¯ãMyArray
㮠species 㯠MyArray
ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ããããããæ´¾çã¯ã©ã¹ã®ã¡ã½ããã§ã親ã§ãã Array
ãªãã¸ã§ã¯ããè¿ãããã«ããããªã¼ãã¼ã©ã¤ããããããããã¾ããã
class MyArray extends Array {
// MyArray species ã親ã§ãã Array ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ãªã¼ãã¼ã©ã¤ãã
static get [Symbol.species]() {
return Array;
}
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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