Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Сегодня :

День славянской письменности и культуры


вопросик по JavaScript


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВт, 23-Дек-2008 12:55    Заголовок сообщения: вопросик по JavaScript
Цитата

что-то не могу справиться вроде как с тривиальной задачкой. Дело в том, что логика ООП в JS несколько различна от онной в стандартных ООП-языках.

вот возмем к примеру как всегда элементарный JS-объект:
Javascript:
  1.  
  2. //Конструктор объекта
  3. function myobject(object_name)
  4. {
  5.  this.flag=false;                                          //вот этот флаг должен и меняться
  6.  this.object_name=object_name;                 //имя объекта, используемое для назначения атрибута ID элемента
  7.  this.event_function=event_function;            //обработчик события, который и будет менять флаг, и показывать его значение в элементе
  8.  this.any_function=any_function;                  //просто функция некая
  9. }
  10.  
  11. //Обработчик события
  12. function event_function(target_element)
  13. {
  14.  this.flag=!this.flag; //КСТАТИ - здесь this.flag всегда изначально воспринимается как = false, и от этого отталкивается изменение его значения, даже если я в конструкторе поставлю this.flag=true
  15.  document.getElementById(target_element).innerHTML="FLAG="+this.flag;        //показываем на что изменился флаг
  16. }
  17.  
  18. function any_function()
  19. {
  20. ...
  21. var myelement=document.createElement("element_tag");     
  22. myelement.setAttribute("id","element_id_"+this.object_name);           //устанавливаем атрибут ID=element_id_[имя которое передали в конструкторе]
  23. myelement.onclick=new Function('event_function("element_id_"+this.object_name);');   //вызываем событие
  24. ....
  25. }
  26.  



ПРОБЛЕМА:
Сойство this.flag - работает как глобальное для всех объектов на всю страницу, а не собственное для конкретно созданного объекта.
Следствие, сами понимаете, когда 1 экземпляр описанного выше класса создаем, все работает отлично. Но когда создаем 2 или более, то, соотв., для изменения содержимого элемента с false на true и наоборот нужно кликать иногда 2 раза.

Добавлено спустя 16 минут 35 секунд:

Есть конечно как всегда обходные пути, пока я вижу вот какие:
вариант 1. Создания какого-нить невидимого элемента с абсолютным позиционированием типа DIV с присвоением его атрибута ID=имя объекта_flag и содержимое его сделать равным значению флага, ну и его соотв. изменять через innerHTML при генерации события.
Этот вариант некрасив и его применять не хочу, разве что на самый худой конец, если вообще других вариантов не будет.
вариант 2. С созданием внешней переменной типа var flag_number_X=false и передачей ее в конструктор создаваемого объекта. Только вот флаг передастся не по ссылке, а лишь его значение, а как в JS по ссылке переменную в функцию передать я что-то не знаю (возможно ли вообще такое?)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСр, 24-Дек-2008 2:08 
Цитата

Помойму в JS передача переменной по ссылке не возможно. Как-то сам с такой проблемой сталкивался и на каком-то форуме нашел, что ДжаваСкрипт нет реализации передачи переменной по ссылке...

Добавлено спустя 10 минут 26 секунд:

Думаю, что this.flag изначально всегда равен FALSE, т.к. область видимости этой переменной ограничено телом функции event_function, т.е. это не та переменная, что объявлена в функции myobject

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеСр, 24-Дек-2008 6:02 
Цитата

to dogma.
а разве this не есть указатель на экземпляр класса myobject?

_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСр, 24-Дек-2008 6:17 
Цитата

this ну вроде как да, вот только обращение к нему происходит из функции не myobject, а из event_function. В общем все выше сказанное мною это лишь предположение... Надо бы про ООП в js почитать.
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеСр, 24-Дек-2008 22:11 
Цитата

dogma,
вывела результат this.flag в документ и посморела, в действительности this.flag в функции event_fucntion = undefinded соответственно, поэтому эта функция про эту переменную вообще ничего не знает, и соотв. приравнивает это значение к false.
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100