Запомнить предыдущий объект перед заменой, затем достать данные прежнего

Рейтинг: 0Ответов: 1Опубликовано: 12.02.2023
let l_time = video.currentTime, pause = video.paused, playbackRate = video.playbackRate;
video.src = '/video_360.mp4';
video.currentTime  = l_time;
video.playbackRate = playbackRate;

Работает, в чем тут дело? Делаю так

(def = video).src = '/video_360.mp4';
video.currentTime  = def.currentTime;
video.playbackRate = def.playbackRate;

Необходимо поменять ссылку на файл другого разрешения. Но для того, чтобы после смены файла, видео началось проигрываться с того же момента. Необходимо, поосле смены, задать тайм. В первом случаи работает, но почему не работает во втором? Запоминаем перед заменой ссылки предыдущий объект в стороннюю переменную. А затем вытаскиваем из нее, но в ней уже объект нового файла.

Толи что делаю не так, не понимаю...

Ответы

▲ 1Принят

Проблема в том, что вы запоминаете не предыдущий объект, а ссылку на объект. Потому переменная def продолжает ссылаться на тот же объект. Подробнее можно почитать здесь.

При копировании объекта некоторые свойства теряются. Тогда я просто предлагаю создавать отдельно объект def и записывать в него требуемые значения:

const def = {
  currentTime: video.currentTime,
  playbackRate: video.playbackRate,
};

// ...
video.currentTime = def.currentTime;
video.playbackRate = def.playbackRate;