Когда я использую StructuredClone для обычного объекта Date, он работает должным образом. Однако если я оберну эту дату в прокси (даже с пустым обработчиком), StructuredClone выдаст исключение DOMException (DataCloneError). Я ожидал, что он либо клонирует целевую дату, либо клонирует свойства в простой объект, но не выдаст ошибку.
Вот минимальный воспроизводимый пример:
Код: Выделить всё
const originalDate = new Date('2023-01-01');
const proxyDate = new Proxy(originalDate, {});
// Works fine
console.log(originalDate.toISOString());
// Output: "2023-01-01T00:00:00.000Z"
// Works fine (proxy forwards the get request)
console.log(proxyDate.toISOString());
// Output: "2023-01-01T00:00:00.000Z"
// Works fine
const cloneOriginal = structuredClone(originalDate);
console.log(cloneOriginal instanceof Date); // true
// THROWS ERROR in Chrome/Firefox/Node.js
try {
const cloneProxy = structuredClone(proxyDate);
} catch (e) {
console.error(e);
// Uncaught DOMException: Failed to execute 'structuredClone' on 'Window':
// # could not be cloned.
}
Почему StructuredClone не разворачивает прокси-сервер и не обрабатывает его как простой объект? Предусмотрено ли такое поведение спецификацией HTML для структурированного клонирования «экзотических объектов» или это потому, что у прокси нет внутренних слотов (
Код: Выделить всё
[[DateValue]]Подробнее здесь: https://stackoverflow.com/questions/798 ... wrapping-a
Мобильная версия