ArrayBuffer[Symbol.species]
åºçº¿
广æ³å¯ç¨
èª 2016å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
ArrayBuffer[Symbol.species] éæè®¿é®å¨å±æ§è¿åç¨äºæé æ°ç»ç¼å²åºæ¹æ³è¿åå¼çæé 彿°ã
è¦åï¼[Symbol.species] çåå¨å
许任æä»£ç æ§è¡ï¼å¹¶å¯è½äº§çå®å
¨æ¼æ´ãè¿ä¹ä½¿æäºä¼åå徿´å å°é¾ã弿å®ç°è
æ£å¨è°æ¥æ¯å¦å 餿¤ç¹æ§ã妿å¯è½çè¯ï¼è¯·é¿å
ä¾èµå®ã
è¯æ³
ArrayBuffer[Symbol.species]
è¿åå¼
è°ç¨ get [Symbol.species] çæé 彿°ï¼thisï¼çå¼ã该è¿åå¼è¢«ç¨äºæé å建æ°çæ°ç»ç¼å²åºçæ°ç»ç¼å²åºæ¹æ³çè¿åå¼ã
æè¿°
[Symbol.species] 访é®å¨å±æ§è¿å ArrayBuffer 对象çé»è®¤æé 彿°ãåç±»æé 彿°å¯ä»¥éå宿¥æ´æ¹æé 彿°èµå¼ãåºæ¬çé»è®¤å®ç°æ¯ï¼
// ç¨äºè¯´æçå设åºç¡å®ç°
class ArrayBuffer {
static get [Symbol.species]() {
return this;
}
}
ç±äºè¿ç§å¤æå®ç°ï¼æ´¾çåç±»ç @species ä¹å°é»è®¤è¿åæé 彿°æ¬èº«ã
class SubArrayBuffer extends ArrayBuffer {}
SubArrayBuffer[Symbol.species] === SubArrayBuffer; // true
å½è°ç¨ä¸ä¼ä¿®æ¹ç°æå¯¹è±¡ï¼èæ¯è¿åä¸ä¸ªæ°çæ°ç»ç¼å²åºå®ä¾æ°ç»ç¼å²åºæ¹æ³ï¼ä¾å¦ï¼slice()ï¼æ¶ï¼å¯¹è±¡ç constructor[Symbol.species] å°è¢«è®¿é®ãè¿åçæé 彿°å°ç¨äºæé 该æ°ç»ç¼å²åºæ¹æ³çè¿åå¼ã
示ä¾
>æ®é对象ä¸ç species
[Symbol.species] 屿§è¿åé»è®¤æé 彿°ï¼å³ ArrayBuffer æé 彿°ã
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
æ´¾ç对象ä¸ç species
å¨ä¸ä¸ªèªå®ä¹ç ArrayBuffer åç±»å®ä¾ä¸ï¼ä¾å¦ MyArrayBufferï¼MyArrayBuffer ç species æ¯ MyArrayBuffer æé 彿°ã使¯ï¼ä½ å¯è½å¸æéåå®ï¼ä»¥ä¾¿å¨æ´¾çç±»æ¹æ³ä¸è¿åç¶ç±» ArrayBuffer 对象ï¼
class MyArrayBuffer extends ArrayBuffer {
// éå MyArrayBuffer species æ¥è¿åç¶ç±» ArrayBuffer æé 彿°
static get [Symbol.species]() {
return ArrayBuffer;
}
}
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-get-arraybuffer-%symbol.species%> |