Во-первых, я использую термин "классы" для обозначения функций с прототипами, которые могут находиться в отдельном файле от основного файла инициализации для того, над чем я работаю.
Теперь на мой вопрос / вопрос:
Я работаю над созданием чего-либо в JavaScript / HTML5 и пытаюсь запрограммировать это «должным образом» (т.е. используя прототипы с форматами, которые, я надеюсь, стандартны). В моем основном файле JavaScript у меня есть методы create, использующие экземпляр (в основном корневой экземпляр моего сценария на основе OOP / prototype), который устанавливает холст.
У меня также есть другой загруженный файл, который содержит «класс» для создания нажимаемых кнопок. На данный момент я просто пытаюсь заставить кнопки рисовать на холсте, однако я не могу получить доступ к экземпляру холста, потому что я считаю, что экземпляр находится вне области видимости (что нормально, я не хочу, чтобы все, что я делаю, содержало длинные точечные обозначения для ссылок на экземпляры). Однако, это доставляет мне проблемы, когда я пытаюсь нарисовать прямоугольник на холсте, учитывая, что «класс», в котором находится кнопка, не может ссылаться на контекст вне ее.
Я нашел способ обойти это, используя что-то вроде:
function CreateButton(btn_x, btn_y, btn_width, btn_height, btn_txt) {
// ... (check and define parameters)
CreateButton.prototype.custom_canvas = document.getElementById('root_canvas');
CreateButton.prototype.ctxt = this.custom_canvas.getContext('2d');
CreateButton.prototype.ctxt.fillStyle = '#666666';
CreateButton.prototype.ctxt.fillRect(this.x, this.y, this.width, this.height);
}
По сути, это надпись поверх холста с одноименным холстом? Я бы предположил, что впоследствии я все еще могу манипулировать обычным холстом, и он будет действовать так, как если бы это был один элемент холста. Я беспокоился, что перерисовка на холсте может занять много памяти при добавлении многих вещей, однако, независимо от метода, нельзя избежать записи поверх холста (даже в том же объеме).
Есть предложения или помощь? Или мой метод использования одного и того же холста в другом классе приемлем?
Спасибо за любые отзывы.
[UPDATE]
Хм, может быть, я должен попробовать передать контекст в качестве параметра и просто использовать его.
... Или я должен просто сделать холст глобальным объектом? Есть предложения?