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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание своих объектов, Помогите разобратся 
:(
    Опции темы
GIK
Дата 6.11.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Хочу глубже узнать создание своих объектоа.
Код

<html>
 <head>
  <script type="text/javascript">
    function book(title, author, jan, rating)
  { this.title = title;
    this.author = author;
    this.jan = jan;
    this.rating = rating;
     this.SHOW = show; //Создаем метод позволяющий вывести всю инфу по выбранному фильму
  }
    function show()
 { objWindow = window.open("", "", "width=500,height=400");
   objWindow.document.write("<html><body>");
   objWindow.document.write("<h1>Описание объекта<\/h1>");
   objWindow.document.write("Название книги:"+this.title+"<\/br>"); 
   objWindow.document.write("Автор:"+this.author+"<\/br>");
   objWindow.document.write("Жандр:"+this.jan+"<\/br>");
   objWindow.document.write("Оценка:"+this.rating+"<\/br>");
   objWindow.document.write("<\/body><\/html>");
   objWindow.document.close();
 }
  function f1()
{ valSel = document.form1.sel1.options[document.form1.sel1.selectedIndex].value;
  valSel = eval(valSel);
  valSel.SHOW(); 
}
  //Создаем экземпляр для блокбастера "КОЛОБОК" для последующего обращения из f1
  op1 = new book("Колобок", "GIK", "Блокбастер", 5);
  //Создаем экземпляр для сказки "Властелин колец" для последующего обращения из f1
  op2 = new book("Властелин колец", "GIK", "Сказка", 1);
    </script>
 </head>
<body>
 <form name="form1">
  <select name="sel1">
   <option value="op1">Колобок</option>
   <option value="op2">Властелин колец</option>
  </select>
<button onclick="f1()">Показать</button><br>
</form>
</body>
</html>

В этом коде мне вроде все понятно, если что поправте.
Понятно что создаются свойства и методы и обращвтся к ним видимо можно только через экземпляры (op1 = new book("Колобок", "GIK", "Блокбастер", 5); )
Как можно обратится сразу, типа var a = book.title
Вставляю вот такой кусок в код,
Код

  function f2()
{ a = book.title;
  alert (a);
}

а он выдает ругательное сообщение.
Вопрос возник из-за топа созданного мною же, после чего Sardar написал такой огроменный код, в котором я до сих пор разобратся не могу. Там в часности исползуются, как я понял, свои объекты, и там есть такой кусок:
Код

AnimationQueue.prototype.wait=function(ms) {
  if(typeof(ms)!='number') throw "AnimationQueue.wait: wait time '"+ms+"' must be an integer representing time in milliseconds";
  this.waittime=ms;
  this.fromTime=(new Date()).getTime();}

Сдесь что-есть что, я могу только наугат думать. Вроде бы обращение к объекту, но что есть prototype.wait понять не могу.
Помогите плиз начинающему разобраться, а то у меня уже крыша едет, чес слово smile

Это сообщение отредактировал(а) Aliance - 6.11.2005, 20:40


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Aliance
Дата 6.11.2005, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


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

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



GIK, ты реально напрягаешь. П-О-Ж-Л-А-У-Й-С-Т-А, пользуйся кнопкой код ПРАВИЛЬНО! smile
Добавлено @ 20:39
А поможет тебе замечательная статья от Сардара: http://forum.vingrad.ru/index.php?showtopic=50738
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 7.11.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата(GIK @ 6.11.2005, 13:18)
а он выдает ругательное сообщение.

Потому как book, это функция-конструктор, не имеет свойства title, что естественно. После запуска функции, она инициализирует новый обьект и создаёт ему свойство title, но для себя она ничего не создаёт. Поставь внутрь arguments.callee.title="свойство функции";, после первого же вызова функции(создания обьекта) будет доступно свойство book.title со строкой. Важно понять что это строчка означает просто: функция, установи своё поле title в значение такое то, если оно не существует, то создай. При каждом обращении к функции это действие выполняеться вновь.


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


Добрый человек
**


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

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



Все понял, но возник такой вопрос.
Ставлю arguments.callee.title="title";
а он выдает "Властелин колец".
Интересно из каких соображений, веть он находится не первым в списке Selecta (первым стоит Колобок smile ), еще и не выбранным. И к томуже он, в определении экземляра, находится по счету вторым.
Sardar взгляни пожалуста:
Код

<html>
 <head>
  <script type="text/javascript">
    function book(title, author, jan, rating)
  { this.title = title;
    this.author = author;
    this.jan = jan;
    this.rating = rating;
    arguments.callee.title=title; 
     this.SHOW = show; //Создаем метод позволяющий вывести всю инфу по выбранному фильму
  }
    function show()
 { objWindow = window.open("", "", "width=500,height=400");
   objWindow.document.write("<html><body>");
   objWindow.document.write("<h1>Описание объекта<\/h1>");
   objWindow.document.write("Название книги:"+this.title+"<\/br>"); 
   objWindow.document.write("Автор:"+this.author+"<\/br>");
   objWindow.document.write("Жандр:"+this.jan+"<\/br>");
   objWindow.document.write("Оценка:"+this.rating+"<\/br>");
   objWindow.document.write("<\/body><\/html>");
   objWindow.document.close();
 }
     function f1()
{ valSel = document.form1.sel1.options[document.form1.sel1.selectedIndex].value;
  valSel = eval(valSel);
  valSel.SHOW(); 
 }
  function f2()
{ a = book.title;
  alert (a);
}
  //Создаем экземпляр для блокбастера "КОЛОБОК" для последующего обращения из f1
  op1 = new book("Колобок", "GIK", "Блокбастер", 5);
  //Создаем экземпляр для сказки "Властелин колец" для последующего обращения из f1
  op2 = new book("Властелин колец", "GIK", "Сказка", 1);
    </script>
 </head>
<body>
 <form name="form1">
  <select name="sel1">
   <option value="op1">Колобок</option>
   <option value="op2">Властелин колец</option>
  </select>
<button onclick="f1()">Показать</button><br>
<button onclick="f2()">Показать</button><br>
</form>
</body>
</html>



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
GIK
Дата 9.11.2005, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Все нашол связь, ура.
Она заключается в определении экземпляра, т.е. тот экземпляр который стоит последним в списке, тот и имеет связь с функцией-конструктором и выдает из-за него "Властелин колец".
Ставлю последним ЭТОТ экземпляр, и он выдает Колбка smile
Код

//Создаем экземпляр для блокбастера "КОЛОБОК" для последующего обращения из f1
  op1 = new book("Колобок", "GIK", "Блокбастер", 5);


Видимо есть какая-то связь с последним из определеных экземпляров, даже если обращение к функции-конструктору происходит не через экземпляр op2.title?


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Sardar
Дата 9.11.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата(GIK @ 9.11.2005, 13:25)
Видимо есть какая-то связь с последним из определеных экземпляров...

Ё-моё, отставить магию! Расслабся и представь что в JS ничего "магическим" образом не происходит(ну почти). Вызов конструктора это вызов функции, внутри конструктора можно изменять любые обьекты, а не только this. Да и понятие this относиться к контексту, а не к конкретному обьекту, смотреть методы call и apply у функций.

Что происходит в твоём коде? Создаёться "Колобок", конструктор изменяет/создаёт себе(обьекту-функции) поле title с текстом "Колобок".
Затем создаёться "Властелин колец", конструктор опять изменяет себе поле title, соотвественно последнее изменение и будет последним. Код ничем не отличаеться от:
Код
function test(a) {
  arguments.callee.value=a;
}
test('text 1');
test('text 2');
alert(test.value);

test('text 3');
alert(test.value);


Сейчас должно быть понятно, что нет никакой "магической" связи между обьектом и конструктором(есть поле constructor у обьекта - ссылка на функцию). Констуркор-функция это такой же обьект как и обьекты которая она пораждает, т.е. может иметь свои поля, которые может сама изменять.

Если ещё не ясно, расслабся, выпей чаю, скажи "магии нет, есть логика!" и прочти текст по новой.


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


 




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


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

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