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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обсуждение темы о "прототипах", флейм, флуд, спасибы, пожелания allowed 
:(
    Опции темы
Sardar
Дата 30.4.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Здесь можно выражать спасибы, а также спрашивать что не ясно. Делать заявки на другие темы и аспекты JS. Впрочем я сам буду постепенно выкладывать "подноготную" smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 1.5.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Браво smile smile
PM MAIL WWW ICQ Skype   Вверх
Aliance
Дата 22.5.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Объясни, зачем вот это:
Код

//раз функция это обьект, то создадим ей свой метод :)
test1.callMe=function(arg){
  this(arg); //мы же функция =)
};
test1.callMe("проба"); //вызов функции test1: "test1: проба"

в первом посте...
Оно ж ничего не делает...
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 22.5.2005, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Это пример, что функция это обьект, как любая другая переменная. Это трудно усвоить например людям пришедшим из C.


Неужели кто то решил таки прочесть сие smile
Какюсь, ещё не дописал, даже примеров из жизни не привёл, всё потом... smile



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 22.5.2005, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Ясно-понятно. Я это хорошо понимаю, значит пропускаем smile

Во втором посте в самом первом коде, почему вот это
Код

    alert(parg.length); //2, 2

выдает 2, а не 0?

да я в первый же день прочитал ее, очень хорошая статья. вот теперь осмысливаю, разбираюсь..
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 22.5.2005, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Aliance @ 22.5.2005, 20:12)
выдает 2, а не 0?

Потому что при вызове функции, не важно как конструктор или как просто функция, создаётся вложенная функция, ссылка на которую присваивается переменной а. Вложенная функция наследует контекст, в котором определенна переменная parg, содержащая ссылку на список аргументов "родительской функции". Другими словами новая функция содержит "вызов" родительской функции и имеет список всех переменных доступных из контекста в момент вызова. При каждом новом вызове "родительской функции" создаётся новая функция, записываемая в а, при вызове функция показывет сколько аргументов было у родителя в момент его вызова.

Попробуй написать пару тестов, сразу поймёшь суть smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 22.5.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Sardar
smile проблемы возникли из-за того, что я стал учить php.
Все время кажется, что нельзя прочитать те значения, которые объявлены после их чтения...
Понятно, теперь.
Добавлено @ 22:18
Вау, я понял пост номер три полностью. Я понял что мне было не понятно - функция test - конструктор. Если мы пишем this - мы создаем новое свойство у объекта... а если var - то переменную smile

Теперь собственно буду ждать инфы о собственно-прототипах, спасибо Сардару smile
PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 28.5.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sardar @ 30.4.2005, 23:42)
Здесь можно выражать спасибы

Выражаю свои СПАСИБЫ.
Sardar, спасибо что потрудился и потратил время, хорошо цементирует smile , гут.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 2.6.2005, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я не ошибаюсь, что в рекурсии каждый раз создаются новые объекты function?

Это сообщение отредактировал(а) Иль - 2.6.2005, 20:55


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 3.6.2005, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата
Я не ошибаюсь, что в рекурсии каждый раз создаются новые объекты function?

Иль, ты всё правильно понял потому функция и держит "контекст вызова внешней функции" smile
Другое дело что в конкретной имплементации не обязательно создаёться куча скомпилированного скриптового кода в памяти, контекст передаёться единой функции, что экономит память и работает быстрее.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 3.6.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Sardar, я недопонимаю. Получается что на практике реализация этого объектного подхода в рекурсии или вложенном вызове самой себя через другие функции не работает?
Вот смотри, есть функция.caller и есть arguments.callee. Они ж дают ссылки на соответствующие объекты, тогда ж почему в операторе if сравниваются их строковое представление?
Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head><body onclick="sd()">
<script language="JavaScript" type="text/JavaScript">
var c,h,r
function sd(){
if(!h){
h=1
}else{
if(h==1){
c=sd.caller
h=arguments.callee
r=arguments
alert((c==h)+"\n очень хочется false")
alert(r)
//testOn("sd.arguments.callee")
}else{
alert(sd.caller.arguments)
alert((r==sd.caller.arguments)+"\n - А хочется true")
alert(c+"\n\n\n\n\t"+(c==arguments.callee)+" -А хочется false\n\n\n\n"+arguments.callee);
alert(c+"\n\n\n\n\t"+(c==sd.caller)+" -А хочется false\n\n\n\n"+sd.caller);
return
}}
sd()
}
</script>
</body></html>

Добавлено @ 11:02
Или это из-за специфики работы оператора if

Это сообщение отредактировал(а) Иль - 3.6.2005, 12:30


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 16.6.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



ppc. Я наконец-то понл примененеие протопипа в большинстве случаев. Ура, товарищи.
Все таки я прочел проф. книгу - понимаю, что до этого нужно "дорости" самостоятельно =)
Вот непонятой осталась одна область:
Зачем протопипы сущ-ют для функции?
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 17.6.2005, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Иль, нет не их строковое преставление сравниваеться, сравниваються ссылки, если обе переменные ссылаються на один обьект функцию, то они идеентичны. Другое дело что caller вещь весьма магическая, не рекомендуемая к употреблению smile Можешь даже заметить что sd.caller, arguments.callee.caller и arguments.caller это разные вещи, хотя по смсылу должны ссылаться на деиный обьект функцию(после рекурсионного вызова). Я не понял вопроса smile
P.S. ивиняюсь что так поздно отвечаю, потестил, получил результаты что не смог обьяснить, а навязывать свою точку зрения не хотел =)

Цитата(Aliance @ 16.6.2005, 12:12)
Зачем протопипы сущ-ют для функции?

В смысле зачем? Функция это тоже обьект, следовательно имеет конструктор(Function), следовательно и прототип(Function.prototype). Будешь ли ты это использовать, третий вопрос, но в языке не должно быть исключений если это не необходимо smile

P.S. В Опере 6 обьект Function не существует. В IE обьект event, window и другие DOM0 обьекты не имеют поля constructor. Это конечно верно, это всё синглтоны, но вносит исключения, что не есть гуд.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 17.6.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(Sardar @ 17.6.2005, 03:53)
В смысле зачем? Функция это тоже обьект, следовательно имеет конструктор(Function), следовательно и прототип(Function.prototype). Будешь ли ты это использовать, третий вопрос, но в языке не должно быть исключений если это не необходимо

Так и знал, что ответ будет таким. Я это прекрасно знаю. меня именно интересует применение smile
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 18.6.2005, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Aliance @ 17.6.2005, 11:02)
Так и знал, что ответ будет таким. Я это прекрасно знаю. меня именно интересует применение

Ну я по натуре человек предсказуемый smile

А применяться это может например чтобы IE5.0 пофиксить, он не поддерживает методов call и apply у функций.
Код
if(typeof(Function)!="undefined" && typeof(Function.prototype.call)!="function")
 Function.prototype.call=function(obj, args) {
   if(typeof(obj)!="object") return;
   //и так, создадим у обьекта новое рандомное не заюзанное поле, куда и включим функцию
   var name="_my_call_temp_name_"+Math.round(Math.random()*1000000);
   while(typeof(obj[name])!="undefined") name="_my_call_temp_name_".Math.round(Math.random()*1000000);
   obj[name]=this;
   //теперь вызовем усё что пришло
   var arg="";
   for(var i=1; i<arguments.length; i++) arg+=", arguments["+i+"]";
   eval("obj."+name+"("+arg.substr(2)+");");
   //теперь подчистим за собой
   delete obj[name];
 }

function test(arg1, arg2) {
  alert("Object field: "+this.field+"\nArgument 1: "+arg1+"\nArgument 2: "+arg2);
}
a={field:"pole!"};
test.call(a, "argument 1 !!!", "argument 2 !");

Аналогично пишеться apply.


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


 




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


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

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