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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объект Function: есть вопросы 
:(
    Опции темы
antiwin
Дата 21.10.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не могу понять следующее выражение:
h.onmouseover=new Function(this.n+'.st('+i+',true)');
а именно - this.n+'.st('+i+',true)'.
Вот фрагмент кода скрипта:
Код
 
var menu=function() 
{
    
  dd.prototype.init=function(p,c)
  {
   a=c; var w=document.getElementById(p), s=w.getElementsByTagName('ul'), l=s.length, i=0;
    for(i;i<l;i++)
    {
      var h=s[i].parentNode; this.h[i]=h; this.c[i]=s[i];
      h.onmouseover=new Function(this.n+'.st('+i+',true)'); // вот эта строка
      h.onmouseout=new Function(this.n+'.st('+i+')');        // или эта
    }
  }
  
    dd.prototype.st=function(x,f)
  {
    var c=this.c[x], h=this.h[x], p=h.getElementsByTagName('a')[0];
   clearInterval(c.t); c.style.overflow='hidden';
    if(f)
    {
      p.className+=' '+a;
     if(!c.mh){c.style.display='block'; c.style.height=''; c.mh=c.offsetHeight; c.style.height=0;}
     if(c.mh==c.offsetHeight){c.style.overflow='visible'}
     else{c.style.zIndex=z; z++; c.t=setInterval(function(){sl(c,1)},t)}
     }
    else{p.className=p.className.replace(a,''); c.t=setInterval(function(){sl(c,-1)},t)}
  }
  return{dd:dd}
}();

То, что запись в ' ' задает функцию st (далее в рабочем файле) это да, но что значит +i+, где i длина списка???


Это сообщение отредактировал(а) antiwin - 21.10.2009, 14:07
PM MAIL   Вверх
IDVsbruck
Дата 21.10.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Похоже, что n - объект в dd, у которого определен метод st().
Надо видеть больше кода (определение n), чтобы сказать больше.
PM MAIL   Вверх
Michael.de
Дата 21.10.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(antiwin @  21.10.2009,  13:56 Найти цитируемый пост)
...но что значит +i+, где i длина списка???

1. Это почему же длина списка? ... i меняется от нуля до s.length-1
2. при i=0 кусок кода new Function(this.n+'.st('+i+',true)');  превращается в new Function(this.n.st(0,true)); ... почему сразу не написать new Function(this.n.st(i,true)); - для меня загадка. Как впрочем и это: var i=0; for(i;i<l;i++) ... уж или for(var i=0;i<l;i++) или var i=0; for(;i<l;i++)  smile
PM MAIL   Вверх
antiwin
Дата 22.10.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(IDVsbruck @ 21.10.2009,  14:16)
Надо видеть больше кода (определение n)...

Вот пропущенная строка.
function dd(n){this.n=n; this.h=[]; this.c=[]}//document.n=n итд.
Вызов в HTML: var a=dd("menu")

Да, к стати, скрипт обеспечивает динамическую менюшку.
Все файлы выложу позже, сейчас не доступа.
PM MAIL   Вверх
antiwin
Дата 22.10.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Michael.de @ 21.10.2009,  22:56)

при i=0 кусок кода new Function(this.n+'.st('+i+',true)');  превращается в new Function(this.n.st(0,true));   smile

Т.е данной строкой создается функция для document.n и все это связывается с событием???
h.onmouseover=new Function(this.n.st(0,true))


PM MAIL   Вверх
Michael.de
Дата 22.10.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



antiwin: не забывай, что var h=s[i].parentNode; А вообще я просто взял найденный тобой "индийский" код и убрал кавычки. Что получилось - то получилось, сорри, код ведь не мой smile
P.S. А такая запись - плохой стиль. Как и использование всяких document.write('что-то там'); и т.п.
PM MAIL   Вверх
antiwin
Дата 23.10.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Michael.de @ 22.10.2009,  15:31)
... я просто взял найденный тобой "индийский" код и убрал кавычки.

Michael.de, а можно уточнить, что "индийского" в этом коде, просто я недавно в javaScript и 
  многие вещи пока не вижу.
И еще, можно прокомментировать данную строку h.onmouseover=new Function(this.n+'.st('+i+',true)');, что происходит после этого с this.n?????



Это сообщение отредактировал(а) antiwin - 23.10.2009, 12:13
PM MAIL   Вверх
NewDima
Дата 23.10.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

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



Цитата(Michael.de @ 22.10.2009,  05:56)
при i=0 кусок кода new Function(this.n+'.st('+i+',true)');  превращается в new Function(this.n.st(0,true)); ... почему сразу не написать new Function(this.n.st(i,true)); - для меня загадка.

Люди, ну зачем разбирать изуродованный каким-то обфускатором код?
ладно, объясню, что там написано
Код

var a=dd("menu")

Эта строка создает менюшку, которая будет ассоциирована с переменной menu, доступ к которой обеспечивается через document.
Конкретно по двум строкам:
Код

h.onmouseover=new Function(this.n+'.st('+i+',true)'); // вот эта строка
h.onmouseout=new Function(this.n+'.st('+i+')');

В данном случае для нулевого айтема меню код синонимичен следующему:
Код

h.onmouseover = function () {
    menu.st(0, true); // Здесь i - индекс менюшки
}

в конструктор Function передается код создаваемой функции.А он получается конкатенацией названия переменно, с которой ассоциировано меню (в нашем слуае - menu, переданное в функцию dd. дальше оператор обращения к методу ("."), имя метода и параметры, передаваемые ему
this.n  содержит название переменной с меню (menu)
i - номер пункта меню на каждой итерации цикла.
вот и получается код
menu.st(индекс, true);
PS. код гнилой и не достоин использования
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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