Я заметил, что CanvasRenderingContext2D.createLinearGradient
находится на прототипе CanvasRenderingContext2D.Почему CanvasRenderingContext2D.createLinearGradient() не является статической функцией?
Это означает, что рекомендуется создавать градиенты (наряду с несколькими другими ресурсами) в контексте, на котором они предназначены.
Однако, я могу создать ресурс на холсте и использовать его на другом холсте:
const ctx1 = document.getElementById('canv1').getContext('2d');
const ctx2 = document.getElementById('canv2').getContext('2d');
const grad = ctx1.createLinearGradient(0, 0, 100, 100);
grad.addColorStop(0, 'white');
grad.addColorStop(1, 'black');
ctx2.fillStyle = grad;
ctx2.fillRect(0, 0, 100, 100);
Есть ли причины для этого, кроме предположительно ресурсов управления временем жизни за кулисами?
Спасибо!
Возможно, это позволяет скрывать в контексте кэширование ресурсов в контексте? Учитывая, что WeakMap теперь вещь, это может быть относительно простая оптимизация для браузеров. В любом случае, я просто буду рассматривать их как простые структуры данных, которые я могу свободно перемещать, и у GC есть дело с очисткой. –