Это хорошая практика, чтобы сделать canvas глобальным объектом в JavaScript? - PullRequest
0 голосов
/ 08 февраля 2011

Я пытаюсь построить проект на JavaScript, который использует HTML-тег canvas.Тем не менее, я сталкиваюсь с несколькими проблемами из-за ссылок на области в моих объектах / прототипах.

Это хорошая идея (или, скорее, хорошая практика), просто сделать элемент холста (как бы много их ни былобывает) глобальным?Я пытался по возможности избегать создания глобальных переменных из-за желания придерживаться ООП-менталитета, но я не нахожу много лучших решений этой проблемы.

Любая обратная связь приветствуется.

Ответы [ 2 ]

4 голосов
/ 08 февраля 2011

На самом деле никогда хорошая идея, чтобы заглушить глобальный объект переменными / ссылками.Этого можно избежать практически во всех ситуациях.

Вы упомянули, что придерживаетесь «ООП-менталитета», что делает его еще хуже.В этом случае вы явно сделали что-то очень неправильное в своей концепции дизайна.Вернуться к чертежной доске!

Как я уже упоминал много раз, минимум усилий, чтобы избежать этого, - создать Function context, который представляет область действия вашего кода.

2 голосов
/ 08 февраля 2011

Похоже, ваша основная проблема заключается в передаче информации в события (функции, которые не получают параметры).

Решением этой проблемы является замыкания .Функции могут использовать любые переменные, определенные в их области видимости, и вы можете использовать это в своих интересах.

function make_event_handler(canvas){
    function my_event_handler(){
        alert('look, I can use '+canvas);
    }
    return my_event_handler;
}

elem.onclick = make_event_handler(canvas);

Вы можете сделать это более сложным, скажем, передав объект «менеджер холста» вместо этого, чтобы позволить изменять холсты во время выполненияа также добавить другие переменные, которые вам могут понадобиться ...

...