Алгоритм структурного клонирования
Алгоритм структурного клонирования копирует сложные объекты JavaScript. Он используется во внутренних вызовах structuredClone(), для передачи данных между воркерами с помощью postMessage(), хранения объектов в IndexedDB или копирования объектов для других API.
Он клонирует, рекурсивно проходя по входному объекту, сохраняя карту ранее посещённых ссылок, чтобы избежать бесконечного прохождения циклов.
Элементы, не поддерживаемые алгоритмом структурного клонирования
-
Functionобъекты не могут быть дублированы алгоритмом структурного клонирования; попытка приводит к исключениюDataCloneError. -
Клонирование узлов DOM также вызывает исключение
DataCloneError. -
Некоторые свойства объектов не сохраняются:
- Свойство
lastIndexобъектовRegExpне сохраняется. - Описание свойств, сеттеры, геттеры и аналогичные метаданные не дублируются. Например, если объект помечен как только для чтения с помощью описания свойства, он будет изменяемым в дубликате, поскольку это значение по умолчанию.
- Цепочка прототипов не обрабатывается и не дублируется.
- Приватные свойства классов не дублируются. (Хотя приватные свойства встроенных типов могут.)
- Свойство
Поддерживаемые типы
Типы JavaScript
ArrayArrayBufferBooleanDataViewDate-
Типы
Error(но см. Типы ошибок ниже). MapNumber-
Объекты
Object: но только простые объекты (например, из литералов объектов). -
Примитивные типы, за исключением
symbol. -
RegExp: но обратите внимание, чтоlastIndexне сохраняется. SetStringTypedArray
Типы ошибок
Для типов Error имя ошибки должно быть одним из: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError (или будет установлено в "Error").
Браузеры должны сериализовать свойства name и message, и ожидается, что они будут сериализовать и другие «интересные» свойства ошибок, такие как stack, cause, и т.д.
AggregateError поддержка ожидается в спецификации в whatwg/html#5749 (и уже поддерживается в некоторых браузерах).
Типы Web/API
AudioDataBlobCropTargetCryptoKey-
DOMException: браузеры должны сериализовать свойстваnameиmessage. Другие атрибуты также могут быть сериализованы/клонированы. DOMMatrixDOMMatrixReadOnlyDOMPointDOMPointReadOnlyDOMQuadDOMRectDOMRectReadOnlyEncodedAudioChunkEncodedVideoChunkFencedFrameConfigFileFileListFileSystemDirectoryHandleFileSystemFileHandleFileSystemHandleGPUCompilationInfoGPUCompilationMessageGPUPipelineErrorImageBitmapImageDataRTCCertificateRTCEncodedAudioFrameRTCEncodedVideoFrameVideoFrameWebTransportError
Примечание: Сериализуемые объекты помечены в файлах Web IDL атрибутом [Serializable].
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm