![]() |
|
||||||||||
|
|||||
|
А в чем разница все-таки? (prototype)
Что-то как в той песне - все путанно и непонятно. И ВСЕ-ТАКИ, ДЛЯ ЧЕГО НУЖЕН prototype??? Читаю про классы. Везде приводят подобный пример: function MyClass(xx, yy)
{
this.x = xx;
this.y = yy;
}
MyClass.prototype.z = 3;
cl = new MyClass(1, 2);
Или при использование prototype - это подобие защищенных переменных типа protected? Короче, что-то совсем туго... Большое спасибо. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
наличие глаз, их положение на теле и их количество - это свойства класса. они хранятся в прототипе.
цвет глаз, размер глаз, их выражение, длина и цвет ресниц - это перснальные свойства экземпляра, они задаются в конструкторе. идея понятна? :) прототип также нужен для организации наследования классов. |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Ну да, prototype - это родовой объект, все (статичные) свойства которого наследуются экземплярами класса.
При задании свойства в прототипе не происходит копирования этого свойства в каждый экземпляр. Все экземпляры просто получают ссылку на это статичное свойство. Ключевое слово здесь - наследование. Твой второй пример экономит память, используя принцип наследования. Кстати, каждый экземпляр имеет свойство _proto, которое указывает на прототип класса (Class.prototype). В статьях Дебройла есть много чего интересного по теме, посмотри на http://www.vmstudio.com/ Но я надеюсь, что Nox еще чего-нить напишет в этом топике, тогда ты точно вникнешь : ) |
|
|||||
|
Теоретически - все понятно. Теперь нужно на практике убедиться в исключительной необходимости prototype.
Прочто не очень понятно по поводу статичности. Ведь и в первом и во втором случае я могу написать cl.z = 100; trace(cl.z); ведь 100 и выведет. В чем тогда статичность? |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
не надо зацикливаться на слове "прототип".
прототип - это шаблон. трафарет, по которому делаются новые "болванки" под экземпляры. а после создания эту "болванку" можно заполнить чем угодно. при этом всё что необходимо любому и каждому представителю класса можно создать и разместить в памяти всего один раз, а потом пользоваться всеми свойствами и методами прототипа так, как будто они принадлежат самому объекту. Цитата:
|
|
|||||
|
Регистрация: 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. |
|
|||||
|
Огромное спасибо.
Пошел осозновать все вышеизложенное. ![]() |
![]() |
Часовой пояс GMT +4, время: 00:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|