Просмотр полной версии : Опять этот 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? Короче, что-то совсем туго...
Большое спасибо.
Nox Noctis
06.05.2004, 11:33
наличие глаз, их положение на теле и их количество - это свойства класса. они хранятся в прототипе.
цвет глаз, размер глаз, их выражение, длина и цвет ресниц - это перснальные свойства экземпляра, они задаются в конструкторе.
идея понятна? :)
прототип также нужен для организации наследования классов.
Whatsername
06.05.2004, 11:44
Ну да, prototype - это родовой объект, все (статичные) свойства которого наследуются экземплярами класса.
При задании свойства в прототипе не происходит копирования этого свойства в каждый экземпляр. Все экземпляры просто получают ссылку на это статичное свойство. Ключевое слово здесь - наследование.
Твой второй пример экономит память, используя принцип наследования.
Кстати, каждый экземпляр имеет свойство _proto, которое указывает на прототип класса (Class.prototype).
В статьях Дебройла есть много чего интересного по теме, посмотри на http://www.vmstudio.com/
Но я надеюсь, что Nox еще чего-нить напишет в этом топике, тогда ты точно вникнешь : )
Теоретически - все понятно. Теперь нужно на практике убедиться в исключительной необходимости prototype.
Прочто не очень понятно по поводу статичности. Ведь и в первом и во втором случае я могу написать
cl.z = 100;
trace(cl.z);
ведь 100 и выведет. В чем тогда статичность?
Nox Noctis
06.05.2004, 12:04
не надо зацикливаться на слове "прототип".
прототип - это шаблон. трафарет, по которому делаются новые "болванки" под экземпляры. а после создания эту "болванку" можно заполнить чем угодно.
при этом всё что необходимо любому и каждому представителю класса можно создать и разместить в памяти всего один раз, а потом пользоваться всеми свойствами и методами прототипа так, как будто они принадлежат самому объекту.
Оригинал написал(а) dm_nev
Кстати, каждый экземпляр имеет свойство _proto, которое указывает на прототип класса (Class.prototype).
__proto__
Whatsername
06.05.2004, 12:05
статичность и в том и в другом случае.
Доверять создание свойств классу (без прототипа) стоит лишь когда ты передаешь значение в качестве параметра класса.
function MyClass(xx, yy)
{
this.x = xx; // динамически задаваемые свойства
this.y = yy; // the same, зеленые глаза, например
}
MyClass.prototype.z = 3; // статичное свойства
// глаза у всех на лице, зачем их вешать на затылок??
cl = new MyClass(1, 2);
Для задания методов класса тоже чаще всего используется прототип класса. Методы способны обрабатывать ДИНАМИЧЕСКИЕ свойства и возвращать результат, а вот копировать их в каждый экземпляр нет необходимости, даже вредно иногда.
------------
__proto__ ой, мля, тока
Огромное спасибо.
Пошел осозновать все вышеизложенное. :D
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.