ArrayBuffer[Symbol.species]
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Статическое свойство-аксессор **ArrayBuffer[Symbol.species]** возвращает конструктор, используемый для создания возвращаемых значений из методов буфера массива.
Внимание: Существование [Symbol.species] позволяет выполнять произвольный код и может создавать уязвимости безопасности. Оно также значительно усложняет некоторые оптимизации. Разработчики движков исследуют возможность удаления этой функции. По возможности избегайте использования этой функции.
Синтаксис
ArrayBuffer[Symbol.species]
Возвращаемое значение
Значение конструктора (this), для которого был вызван get [Symbol.species]. Возвращаемое значение используется для создания возвращаемых значений из методов буфера массива, которые создают новые буферы массива.
Описание
Свойство-аксессор [Symbol.species] возвращает конструктор по умолчанию для объектов ArrayBuffer. Конструкторы подклассов могут переопределять его, чтобы изменить присвоение конструктора. Реализация по умолчанию выглядит примерно так:
// Hypothetical underlying implementation for illustration
class ArrayBuffer {
static get [Symbol.species]() {
return this;
}
}
Благодаря этой полиморфной реализации, [Symbol.species] производных подклассов также по умолчанию будет возвращать сам конструктор.
class SubArrayBuffer extends ArrayBuffer {}
SubArrayBuffer[Symbol.species] === SubArrayBuffer; // true
При вызове методов буфера массива, которые не изменяют существующий объект, а возвращают новый экземпляр буфера массива (например, slice()), будет осуществляться доступ к constructor[Symbol.species] объекта. Возвращаемый конструктор будет использоваться для создания возвращаемого значения метода буфера массива.
Примеры
Спецификатор (species) в обычных объектах
Свойство [Symbol.species] возвращает конструктор по умолчанию, который является конструктором ArrayBuffer для ArrayBuffer.
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
Спецификатор (species) в производных объектах
В экземпляре пользовательского подкласса ArrayBuffer, такого как MyArrayBuffer, спецификатор MyArrayBuffer — это конструктор MyArrayBuffer. Однако вы можете захотеть переопределить его, чтобы возвращать родительские объекты ArrayBuffer в методах вашего производного класса:
class MyArrayBuffer extends ArrayBuffer {
// Overwrite MyArrayBuffer species to the parent ArrayBuffer constructor
static get [Symbol.species]() {
return ArrayBuffer;
}
}
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
@@species |
51 |
13 |
48 |
38 |
10 |
51 |
48 |
41 |
10 |
5.0 |
51 |
10 |
1.0.0 |
1.0 |
6.5.0 |
Смотрите также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/Symbol.species