Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объекты JavaScript? Ключевое слово this 
:(
    Опции темы
borber
Дата 25.9.2003, 12:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Когда вызываю в скрипте свойство созданного объекта, чтобы его изменить, он это свойство не видит!
Где ошибка? Вот, например, код:
Код

function knopik(id,src,nadpis){
this.id=id;
this.src=src;
this.nadpis=nadpis;
//метод
this.naezd=naezd;

this.structure="<table background='"+this.src+"' style='color:white;background-repeat : no-repeat;"+
"background-position : center;font-size: 12px;'  onmouseover='naezd()'"+
" border='2' height='75' width='197'><tr><td id='"+this.id+"' align='center'><b>"+this.nadpis+"<br>"+
"</b></td></tr></table>";

}

function naezd(){
alert(this.nadpis);

}

myKnop = new knopik("kk1","kartinka.gif","новая кнопка!");

document.write(myKnop.structure);


</BODY>

Спасибо заранее!
  Вверх
IZ@TOP
Дата 25.9.2003, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Вот, ты забыл одну вещь сделать:

Код
<BODY bgcolor="#FFFFFF">
<script>
function knopik(id,src,nadpis){
this.id=id;
this.src=src;
this.nadpis=nadpis;
//метод
this.naezd=naezd;

this.structure="<table background='"+this.src+"' style='color:white;background-repeat : no-repeat;"+
"background-position : center;font-size: 12px;' onmouseover='[b]myKnop.naezd();[/b]'"+
" border='2' height='75' width='197'><tr><td id='"+this.id+"' align='center'><b>"+this.nadpis+"<br>"+
"</b></td></tr></table>";

}

function naezd(){
alert(this.nadpis);

}

myKnop = new knopik("kk1","kartinka.gif","новая кнопка!");

document.write(myKnop.structure);
</script>

</BODY>



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
borber
Дата 25.9.2003, 14:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Так это не то... Фокус-то в том, чтобы ЛЮБОЙ объект, созданный по этому конструктору, позволял манипулировать со своим свойством nadpis. Я пытался вызывать метод this.naezd() - ругается, что "объект не поддерживает метод"...
  Вверх
IZ@TOP
Дата 25.9.2003, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Я че то не пойму ... ты поьзуешся методами конструктора из других функций вызывая их из объекта, тогда все получается:
Код

myObject = new constr_func(parameter1,parameter2,parameter3);

А потом можешь определенными в них переменными пользоваться из другой функции вызывая ее из myObject - myObject.other_func();
...
По другому ни как ... вроде ...


Или может я чего не так понял confused.gif


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
m@kxus
Дата 26.9.2003, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 20.2.2003
Где: Estonia

Репутация: нет
Всего: 2



Код
<HTML>
<BODY bgcolor="#FFFFFF">
<script>
function knopik(id,nadpis){
 this.id=id;
 this.nadpis=nadpis;
 this.fn_naezd = function my_naezd() { alert(id+'@'+nadpis); };

 var tbl = document.createElement('TABLE');
 tbl.parent  = this;
 tbl.id   = 'tbl_'+this.id
 tbl.border  = 1;
 tbl.attachEvent('onclick', this.fn_naezd);

 var row = tbl.insertRow();
 var col = row.insertCell();
 col.innerHTML = this.id + '_' + this.nadpis;

 document.body.appendChild(tbl);
}

myKnop = new knopik("kk1","test");
myKnop = new knopik("kk2","test");
myKnop = new knopik("kk3","test");
myKnop = new knopik("kk4","test");
myKnop = new knopik("kk5","test");

</SCRIPT>
</BODY>
</HTML>

PM MAIL WWW ICQ AOL YIM MSN   Вверх
nikolin
Дата 26.9.2003, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 6.7.2003
Где: Варна - Болгария

Репутация: нет
Всего: 1



Метод надо предварително дефинират , впереди конструктора или как тебыа сказали
this.fn_naezd = function my_naezd() { alert(id+'@'+nadpis); };
PM MAIL WWW ICQ   Вверх
borber
Дата 26.9.2003, 12:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо, Максим, это буквально то, что надо, прямо в точку! :-)))
Успехов!
  Вверх
borber
Дата 26.9.2003, 12:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











И тебе спасибо, nikolin, тоже интересно. :-) только, правда, все равно не работает... :-)
  Вверх
nikolin
Дата 27.9.2003, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 6.7.2003
Где: Варна - Болгария

Репутация: нет
Всего: 1



Если хочешь узнат более а том как писать <table> динамично в документ ето книга для тебя "Mastering of JavaScript , Perl and CGI"

А что не работает , код Максима confused.gif я попробал , все в порядке . Если не рабоатет у тебя взгляд какие браузера попробал код . IE - ok , NS - confused.gif
PM MAIL WWW ICQ   Вверх
borber
Дата 28.9.2003, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.9.2003

Репутация: нет
Всего: нет



nikolin, я имел в виду, что не работает мой код, независимо от того, где определяешь метод - до конструктора, после или внутри. Я так и не понимаю, почему нельзя обратиться к свойству объекта через его метод с помощью слова this. Или я совсем чего-то не понимаю?
PM MAIL   Вверх
m@kxus
Дата 29.9.2003, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 20.2.2003
Где: Estonia

Репутация: нет
Всего: 2



borber, событие onmouseover в твоём коде возникает при наведении мышиного курсора на ячейку, затем поднимается до таблицы и дальше вверх по модели до уровня document.body. Объект myKnop находится вне DOM и поэтому там не возникает это событие. То есть, в твоей функции naezd, объект this - это не myKnop, а именно ячейка таблицы.

В своём коде я аттачу обработчик события на таблицу, используя его внутри объекта, предварительно объявив его как метод объекта this.fn_naezd = function my_naezd()
PM MAIL WWW ICQ AOL YIM MSN   Вверх
borber
Дата 1.10.2003, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.9.2003

Репутация: нет
Всего: нет



m@kxus, так все-таки как твой код внедрить в нужное место уже имеющейся html-страницы? Чтобы конструктор один раз писался, а объекты потом где надо существовали? Вот это вот: document.body.appendChild(tbl); как изменить?
PM MAIL   Вверх
m@kxus
Дата 1.10.2003, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 20.2.2003
Где: Estonia

Репутация: нет
Всего: 2



borber, можно использовать методы insertBefore, insertAdjacentElement, appendChild, appendElement - это для IE. Например, передавать в конструктор параметром ссылку на объект, внутри, после или перед которым нужно вставить новый объект. Далее просто вызываешь в нужном месте конструктор.

Я не могу дать тебе более точного ответа, потому что не знаю, для чего ты собрался применять этот код.
Всё зависит от реализации, как ни банально это звучит...
PM MAIL WWW ICQ AOL YIM MSN   Вверх
borber
Дата 1.10.2003, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.9.2003

Репутация: нет
Всего: нет



идея была совершенно простенькая: кнопки навигации на сайте сделать одинаковыми изображениями (всего 2 - _on и _off), различающимися только надписями, и тем самым облегчить страницы (сейчас - каждая кнопка - своя картинка, различается только надписью). Твой код сам по себе работает именно так как надо, но вставить его столько раз, сколько хочу, в те места, куда хочу - не получается у меня. А реализация - да вот на, например, такая страница (чего тут мудрствовать):
Код

<html>
<head>
</head>
<body>
КАКОЙ-ТО ТЕКСТ И КАРТИНКИ
<table cellspacing="2" cellpadding="2" border="1">
<tr>
   <td></td>
   <td></td>
   <td></td>
</tr>
<tr>
   <td></td>
   <td></td>
   <td></td>
</tr>
</table>
ЕЩЕ ТЕКСТ И КАРТИНКИ
<table cellspacing="2" cellpadding="2" border="1">
<tr>
   <td>ф</td>
   <td>ы</td>
   <td>в</td>
</tr>
<tr>
   <tdа>м</td>
   <td>к</td>
   <td>п</td>
</tr>
</table>
</BODY>
</html>

Ну, в ячейках таблицы что-то есть...
вот как вставить по 1 кнопке в каждую вторую, например, ячейку?

PM MAIL   Вверх
m@kxus
Дата 2.10.2003, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 20.2.2003
Где: Estonia

Репутация: нет
Всего: 2



Код
<html>
<head>
</head>
<body>

<script>
function knopik(parent,id,nadpis){
this.id=id;
this.nadpis=nadpis;
this.fn_naezd = function my_naezd() { alert(id+'@'+nadpis); };

var tbl = document.createElement('TABLE');
tbl.parent  = this;
tbl.id   = 'tbl_'+this.id
tbl.border  = 1;
tbl.attachEvent('onclick', this.fn_naezd);

var row = tbl.insertRow();
var col = row.insertCell();
col.innerHTML = this.id + '_' + this.nadpis;

parent.innerHTML = '';
parent.appendChild(tbl);
}
</script>

<table cellspacing="2" cellpadding="2" border="1">
<tr>
  <td width="20">&nbsp;</td>
  <td id="td1">&nbsp;</td>
  <td width="20">&nbsp;</td>
</tr>
<tr>
  <td width="20">&nbsp;</td>
  <td id="td2">&nbsp;</td>
  <td width="20">&nbsp;</td>
</tr>
</table>
<br>
<table cellspacing="2" cellpadding="2" border="1">
<tr>
  <td width="20">&nbsp;</td>
  <td id="td3">&nbsp;</td>
  <td width="20">&nbsp;</td>
</tr>
<tr>
  <td width="20">&nbsp;</td>
  <td id="td4">&nbsp;</td>
  <td width="20">&nbsp;</td>
</tr>
</table>

<script>
myKnop = new knopik(document.all.td1,"kk3","test1");
myKnop = new knopik(document.all.td2,"kk3","test2");
myKnop = new knopik(document.all.td3,"kk3","test3");
myKnop = new knopik(document.all.td4,"kk4","test4");
</script>

</BODY>
</html>

PM MAIL WWW ICQ AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2127 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.