![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Ах так!
Тогда вопросы к Джону.1. как я понимаю при определении ф-ции конструктора не создается никаких объектов? function constructor_one() { this.a = "a" this.b = "b" this.method = function() { trace("one") } } 2. при вызове конструктора, например one = new constructor_one(); в памяти компа создается блок со следующими полями: 1.a содержит символ "а" 2.b содержит символ "b" 3.поле method содержит ссылку на область памяти, где описана функция метода 4. есть некая ссылка на объект prototype ( в данном случае, пустой ). Или ее нет? Я все правильно понял? Или нет? А если сделаем: two = new constructor_one(); Первые 2 поля создаются заново для объекта 2. 3-е поле тоже содержит ту же самую ссылку на ту же функцию. А четвертое? Ссылку на тот же прототип? constructor_one.prototype.new_param = "new_param"; В этом случае в области, где содержится прототип (общий для всех объектов) появляется описание прототипа. Я не понимаю такой вещи: если сделать one.new_param="one_param"; two.new_param="two_param"; где содержатся эти параметры? Заводится в ОЗУ новое поле под пятый параметр? --- Спасибо заранее за пояснения. Вопросы еще будут ![]()
__________________
suum quique |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
one.new_param="one_param";
two.new_param="two_param"; да создается новое поле, локально относительно объекта, one, two если вызвать delete one.new_param, то поле new_param в объекте one будет удалено, и при вызове one.new_param, будет получено содержание поля прототипа. Прототип, по умолчанию, это новосозданный объект, и он является субкласом объекта Object.prototype, можно предположить что для создании прототипа используется конструктор Object. Но это не однозначно. чтобы убрать наследование создаваемого класса от верхнего Object. Нужно присвоить прототипу прототипа, неопределенное значение. constructor_one.prototyoe.__proto__ = undefined; теперь вернусь о поле пртототипа (суперкласса) и создоваемого объекта (субкласса) если в объекте субклассе есть вызываемое поле (в нашем примере "new_param") то вызывается значение данного поля, если такого поля нет, то вызываетя суперкласс (прототип) и вызывается одноименно поле, и так далее, вверх и вверх по иерархии, пока у объекта не будет прототипа. Если на одном из этапов, цепочки наследования создать локальное поле, то можно управлять наследованием... ну в общем все достаточно просто. |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
"Прототип, по умолчанию, это новосозданный объект",
имеется ввиду, создается при создании функции, не понимать что для каждого созданного объекта создается свой прототип.... прототип общий для всех объектов созданных одним конструктором, (если конечно умышленно не было подмены, самим программистом) |
|
|||||
|
да....мудрено ....
john, а в шестерке что-нить поменялось при работе с прототипами? и где мона про это почитать поподробнее ?? плз. Последний раз редактировалось Baltika; 01.12.2001 в 19:05. |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
в шестерке появятся проперти...(properties)
это очень большой этап, (во флэш естествено )это поле, при изменении значения которого можно будет выполнять одну функцию (метод) а при запросе значения выполнять другую функцию (метод) короче геттеры/сеттеры. тут есть возмжность создавать поля только для чтения, если немного поизвращатся то можно создавать приватные поля. второй большой этап, это доступ к элементам библиотеки, как к классам, через registerClass. Что позволяет мувиклипы и кнопки объединять в цепочки наследований, и подменять классы уже в процессе, через идентификаторы (linkages) библиотеки. еще одна большая возможность, так это появление нормальных идентификаторов классов. для удобства вводится указатель super, на супер класс. вообще шестерка вся пропитана ООП. Вернее ООС. Не объектно ориентированное программирование, а объектно ориентированный скриптинг. (это кстати термин самой макромедии) Что мне кажется более коректнее. Но ООП - привычнее ![]() |
|
|||||
|
Пасиб, а где про это почитать можно ?
или будет новая статья ? ![]() |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Да негде особенно почитать,
да и статью рано писать, мало что еще добавят (изменят) в релизе. кстати, забавно шестерка отображает лист объектов.. говорю же что все ооп пропитано, Variable _level0.$version = "WIN 6,0,0,225" Variable _level0.cons = [function 'cons'] { prototype:[object #2, class 'proto'] { prop:, prop_get:[function], prop_set:[function] } } Variable _level0.proto = [function 'proto'] Variable _level0.a = [object #6, class 'proto'] { prop:"n" } Variable _level0.b = [object #7, class 'proto'] {} Variable _level0.c = [object #8, class 'proto'] {} Variable _level0.d = [object #9, class 'proto'] {} Variable _level0.e = [object #10, class 'proto'] {} |
![]() |
Часовой пояс GMT +4, время: 23:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|