Если у меня есть функция рендеринга в моей игре, например, что называется на довольно высокой скорости (определяется requestAnimationFrame), как это, например:Это хорошая идея, использовать оператор with-context с контекстом?
function render() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.arc(player.x, player.y, player.size/2, 0, Math.PI * 2);
ctx.fillStyle = "#6f00ff";
ctx.fill();
}
Почему просто не просто обернуть все это внутри с-заявление?
function render() {
with (ctx) {
clearRect(0, 0, canvas.width, canvas.height);
beginPath();
arc(player.x, player.y, player.size/2, 0, Math.PI * 2);
fillStyle = "#6f00ff";
fill();
}
}
Это хорошая идея/практика? Если нет, почему бы и нет?
EDIT ///////
Для вас, ребята, которые не имеют ни малейшего представления, что HTML5 холст:
холст является ссылкой на элемент в <canvas>
DOM (Document Object Model), может выглядеть как это:
var canvas = document.getElementsByTagName("canvas")[0];
и CTX является ссылкой:
var ctx = canvas.getContext("2d");
Что? Очевидно, что объект ctx является экземпляром 'CanvasRenderingContext2D', и еще более очевидно, что * не * содержит свойство игрока – super
@ Murplyx - это не очевидно для всех и, возможно, не для тех, кому, возможно, придется поддерживать код. – RobG
@Murplyx: Действительно ли очевидно, что объект 'CanvasRenderingContext2D' не имеет свойства' player'? Что делать, если библиотека обновлена, чтобы содержать свойство 'player', а человек, добавивший его, забыл об этом' with' statement? Именно по этой причине 'with' считается boobytrap и отключается в строгом режиме. – slebetman