Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 06.05.2004, 11:17
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 1  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
По умолчанию Опять этот Prototype, блин...

А в чем разница все-таки? (prototype)
Что-то как в той песне - все путанно и непонятно. И ВСЕ-ТАКИ, ДЛЯ ЧЕГО НУЖЕН prototype??? Читаю про классы. Везде приводят подобный пример:



Код:
function MyClass(xx, yy)
{
	this.x = xx;
	this.y = yy;
}
MyClass.prototype.z = 3;

cl = new MyClass(1, 2);
Пишут - prototype для объявления свойства в классе. Ok. А чем x и y не свойства? И чем выше приведенный код будет отличаться от следующего:


Код:
function MyClass(xx, yy)
{
	this.x = xx;
	this.y = yy;
	this.z = 3;
}

cl = new MyClass(1, 2);
Или при использование prototype - это подобие защищенных переменных типа protected? Короче, что-то совсем туго...
Большое спасибо.

Старый 06.05.2004, 11:33
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 2  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
наличие глаз, их положение на теле и их количество - это свойства класса. они хранятся в прототипе.

цвет глаз, размер глаз, их выражение, длина и цвет ресниц - это перснальные свойства экземпляра, они задаются в конструкторе.

идея понятна? :)

прототип также нужен для организации наследования классов.

Старый 06.05.2004, 11:44
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 3  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Ну да, prototype - это родовой объект, все (статичные) свойства которого наследуются экземплярами класса.
При задании свойства в прототипе не происходит копирования этого свойства в каждый экземпляр. Все экземпляры просто получают ссылку на это статичное свойство. Ключевое слово здесь - наследование.

Твой второй пример экономит память, используя принцип наследования.

Кстати, каждый экземпляр имеет свойство _proto, которое указывает на прототип класса (Class.prototype).

В статьях Дебройла есть много чего интересного по теме, посмотри на http://www.vmstudio.com/

Но я надеюсь, что Nox еще чего-нить напишет в этом топике, тогда ты точно вникнешь : )

Старый 06.05.2004, 11:56
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 4  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
Теоретически - все понятно. Теперь нужно на практике убедиться в исключительной необходимости prototype.
Прочто не очень понятно по поводу статичности. Ведь и в первом и во втором случае я могу написать

cl.z = 100;
trace(cl.z);

ведь 100 и выведет. В чем тогда статичность?

Старый 06.05.2004, 12:04
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 5  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
не надо зацикливаться на слове "прототип".

прототип - это шаблон. трафарет, по которому делаются новые "болванки" под экземпляры. а после создания эту "болванку" можно заполнить чем угодно.

при этом всё что необходимо любому и каждому представителю класса можно создать и разместить в памяти всего один раз, а потом пользоваться всеми свойствами и методами прототипа так, как будто они принадлежат самому объекту.
Цитата:
Оригинал написал(а) dm_nev
Кстати, каждый экземпляр имеет свойство _proto, которое указывает на прототип класса (Class.prototype).
__proto__

Старый 06.05.2004, 12:05
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 6  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
статичность и в том и в другом случае.
Доверять создание свойств классу (без прототипа) стоит лишь когда ты передаешь значение в качестве параметра класса.

function MyClass(xx, yy)
{
this.x = xx; // динамически задаваемые свойства
this.y = yy; // the same, зеленые глаза, например
}
MyClass.prototype.z = 3; // статичное свойства
// глаза у всех на лице, зачем их вешать на затылок??

cl = new MyClass(1, 2);

Для задания методов класса тоже чаще всего используется прототип класса. Методы способны обрабатывать ДИНАМИЧЕСКИЕ свойства и возвращать результат, а вот копировать их в каждый экземпляр нет необходимости, даже вредно иногда.
------------
__proto__ ой, мля, тока


Последний раз редактировалось dm_nev; 06.05.2004 в 12:07.
Старый 06.05.2004, 12:11
Lego вне форума Посмотреть профиль Отправить личное сообщение для Lego Найти все сообщения от Lego
  № 7  
Lego
 
Аватар для Lego

Регистрация: Nov 2001
Адрес: Днепропетровск
Сообщений: 107
Отправить сообщение для Lego с помощью ICQ
Огромное спасибо.
Пошел осозновать все вышеизложенное.

Создать новую тему   Часовой пояс GMT +4, время: 02:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.