2013-12-11 4 views
0

Я работаю над проектом с использованием холста Html5, я хочу добавить методы в Canvas Object. Что-то вроде этого ...Как добавить методы в холст Html5?

HtmlCanvas.alert = function() { alert("width : " + this.width + ", height : " + this.height) }; // adding method 
var canvas1 = document.getElementById("myCanvas1"); // getting canvas1 
canvas1.width = 200; // setting width 
canvas1.height = 200; // setting height 

var canvas2 = document.getElementById("myCanvas2"); // getting canvas1 
canvas2.width = 100; // setting width 
canvas2.height = 100; // setting height 

canvas1.alert(); // alert info 
canvas1.alert(); // alert info 
+0

Я бы подумал, что вы хотите создать «класс», который содержит ссылку на объект canvas. IOW, используйте композицию, а не расширение. –

+1

Если это не для домашней работы в классе, не слушайте усыхающие, а не белые сирены, и просто добавляйте методы к CanvasRenderingContext2D.prototype. У Javascript достаточно недостатков, чтобы не использовать его гибкость. Изменение прототипа совершенно «легально», и я не был (? Еще?) Преобразован в жабу для использования этого. – GameAlchemist

+1

@GameAlchemist: Я тоже ... ribit, ribit, ribit :) Я все время добавляю к прототипам, но я редко меняю существующие методы - плохая карма! – markE

ответ

0

Я настоятельно рекомендую не пытаться распространять собственные объекты веб-браузеров.

  • Очень плохой практикой в ​​программировании применять новые функции к классам, которые не поддаются контролю. Это уменьшает ремонтопригодность базы кода.

  • веб-безопасности может не нравится идея вы баловаться с собственными объектами Прототипы

  • Вы не можете гарантировать Canvas API остается, как же в будущем браузеров и, таким образом, ваши функции могут конфликтовать с будущими браузерами

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

Подробнее об этом деле в этом (почти соответствующий) вопрос:

Subclassing CanvasRenderingContext2D

Однако, если вы хотите сделать это после того, как все это пессимизм, добавив новые функции к существующим объектам JavaScript легко, как:

var c = document.getElementById("myCanvas1"); 

c.alert = function() { 
    alert("xxx"); 
} 


c.alert(); 
+0

-1: отвращение к изменениям прототипов - это сообщение, которое хорошо продается и может применяться для * некоторых * изменений, в 300 000 строк кода проекта, который был построен, чтобы продержаться 10 лет и более. Для 99,9999% изменений, это довольно актуально, чтобы сказать: «Не полагайтесь на html-спецификации, они могут меняться». – GameAlchemist

+0

Так что это хорошая идея расширить Canvas? –

+0

eh Я не согласен с нисходящим. То, что ОП пытается сделать, продлевает холст, кажется глупым. – Loktar

Смежные вопросы