Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > ОПП - функция для <img>


Автор: WideSpeC 5.10.2007, 18:06
Мне нужно сделать такую штуку:

MyImgName1.MyFunc(ImSrc,ImWidth);
MyImgName2.MyFunc(ImSrc,ImWidth);
... и т. д.

Функция должна быть всего одна. 
Впереди подставляются имена объектов типа <IMG>, которые она меняет. 

По скудным статейкам по ООП не разобрался.  Может кто-нибудь знает книгу?
А формирование команд через EVAL - дебилистическое занятие.

Хочецца увидеть рабочий пример функции, устанавливающей SRC или WIDTH.
И она должна работать не только на Netscape, но и на большинстве браузеров.

Автор: Тутанхамец 6.10.2007, 09:59
А тебе принципиально использовать ООП-синтаксис? Может проще сделать функцию типа:
Код

function SetDimensions(MyImg, NewWidth, NewHeight)
{
MyImg.style.width=NewWidth;
MyImg.style.height=NewHeight;
}


Автор: dsCode 6.10.2007, 12:02
WideSpeC, делаете обычный объект ("класс"), основная проперть которого будет изображение (объект изображения или srс его). Реализуете необходимые методы. В общих чертах - что-то вроде:

Код

function myImage(imgObj) {
  // "конструктор"
  this.img = imgObj;
}

myImage.prototype.setWidth = function(windth) {
  this.width = this.img.style.width = width;
  return true;
}

myImage.prototype.getWidth = function() {
  return this.width;
}

// и т.д.

// далее, объект "класса"
var myImg = new myImage(здесь_оъект_изображения);
myImg.setWidth('200px');
alert(myImg.getWidth());

Автор: solenko 6.10.2007, 13:40
Чисто академический интерес...
Можно как-то расширить стандартные DOM классы?
Ведь можно же добавить Array.prototype.sume_function = ...
А для DOMElement можно такое как-то сделать?

Автор: vasac 6.10.2007, 21:50
Можно во всех нормальных браузерах. Аналогично Array.
В ненормально браузере DOM-объекты не имеют прототипов.

Автор: AKS 7.10.2007, 10:49
Цитата(vasac @  6.10.2007,  21:50 Найти цитируемый пост)
В ненормально браузере DOM-объекты не имеют прототипов. 

Зато они имеют behavior и htc.

Автор: vasac 7.10.2007, 13:25
Цитата(AKS @  7.10.2007,  10:49 Найти цитируемый пост)
Зато они имеют behavior и htc. 

Ну, вобщем я тоже не сторонник заявлений "единственные стандарты — w3c, а IE отстой". Есть много моментов, где IE лучше.
Но почему при всех его достоинствах, у DOM-элементов нет прототипов?
Почему в обработчиках событий this ссылается фиг знает куда?
Почему элементарные замыкания текут, а разработчики несколько лет писали в своих блогах, как это обходить, прежде чем взять и просто исправить?
smile

Автор: AKS 7.10.2007, 18:31
vasac, столько вопросов, а ответ-то один. Все это потому, что в IE элементы документа не являются объектами JScript. Интерфейс DOM устроен иначе, и переделывать его для того, чтобы предоставить доступ к предкам нод, не станет никто. Вот пример одной из причин. Даже авторы js-скриптов не хотят переделывать свою писанину, приговаривая: "А оно и так работает, зачем мне это нужно". Так что уж говорить о IE-движке?

Добавлено через 3 минуты и 37 секунд
Да, кстати. Давно ли это все "добро" (HTMLElement и проч.) появилось в Safary, к примеру, или в Opera? 

Автор: vasac 7.10.2007, 18:56
Сафари в баню )
Цитата(AKS @  7.10.2007,  18:31 Найти цитируемый пост)
Все это потому, что в IE элементы документа не являются объектами JScript.

Ну, вот и именно. А почему?

Автор: AKS 7.10.2007, 19:08
Цитата(vasac @  7.10.2007,  18:56 Найти цитируемый пост)
А почему? 

Пока мне не посчастливилось где-нибудь прочесть исповедь разработчиков IE касательно этого вопроса. Вообще, в какие времена-то уходит корнями IE-движок, а? Я вот в прошлом году узнал кое-что об window.event в IE. Сначала обалдел, а потом призадумался: "Да это же сделано в какие дремучие времена - чего же ожидать". О том и пишу, что "поросло все мхом", но переделывать - зачем? Что за необходимость, спросит нас с Вами разработчик IE, в HTMLElement'е?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)