Я работаю с элементом Canvas в HTML5, и мне интересно, как лучше реализовать мои собственные, настраиваемые функции рисования функциональным способом. Каждому из них понадобится контекст, но я могу придумать несколько способов дать ему это:
- Добавить его в качестве параметра к каждому вызову функции рисования
- Добавить его в качестве глобальной переменной
- Вызовите getContext в каждом методе рисования.
- Расширение прототипа «CanvasRenderingContext2D».
Мне не нравится использовать глобальные переменные, если я могу их избежать, поэтому я отказываюсь от варианта 2. Вариант 3 требует слишком большого дублирования кода, поэтому я также игнорирую это.
Это оставляет меня с выбором 1, как я это сделал бы на нефункциональном языке, и 4, который, на мой взгляд, является самым чистым подходом, но я не совсем уверен, что это не приведет к проблемам. Как ты делаешь это? Есть ли причина, по которой я не должен использовать вариант 4?
Чтобы проиллюстрировать это, я добавлю пример кода для каждого из оставшихся вариантов. Вот вариант 1:
function drawPerson(context, ...) {
context.fillRect(...);
...
}
$(function() {
var context = $("#canvas")[0].getContext("2d");
drawPerson(context, ...);
});
А вот вариант 4:
CanvasRenderingContext2D.prototype.drawPerson = function(...) {
this.fillRect(...);
...
}
$(function() {
var context = $("#canvas")[0].getContext("2d");
context.drawPerson(...);
});