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

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

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

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
По умолчанию Вопрос по Робину Дебройлу (ООП)

Код:
Pet = function( name )
{
    this.name = name;
}
Pet.prototype.legs = 4;
Pet.prototype.pet = true;

Dog = function( name ){

	this.$_base = Pet;
	this.$_base (name);
	delete (this.$_base);
 
}
Dog.prototype.__proto__ = Pet.prototype;
Dog.prototype.price = 10;

rover  = new Dog( "Rover" );

for(var i in rover){ trace( i + ":\t" + rover[i] ) }

Подскажите, пожалуйста, как rover получает свойство name.
Я не понимаю как работает:

this.$_base = Pet;
this.$_base (name);
delete (this.$_base);

Почему просто this.Pet (name); - не читает? Что передается в случае this.Pet (name); ?

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

Регистрация: Aug 2001
Сообщений: 4,121
зачем так хитро ? :)
Код:
Pet = function (name) {
	this.name = name;
};
Pet.prototype.legs = 4;
Pet.prototype.pet = true;
Dog = function (name) {
	Pet.apply(this, [name]); 
};
Dog.prototype.__proto__ = Pet.prototype;
Dog.prototype.price = 10;
rover = new Dog("Rover");
for (var i in rover) {
	trace(i+":\t"+rover[i]);
}
и вся эта заморочка с созданием и удалением this.$_base нужна была только для того чтобы в качестве this внутри функции Pet был тот же объект, который в качестве this внутри функции Dog.


Последний раз редактировалось Nox Noctis; 20.11.2003 в 16:34.
Старый 20.11.2003, 16:26
Пушистик вне форума Посмотреть профиль Отправить личное сообщение для Пушистик Посетить домашнюю страницу Пушистик Найти все сообщения от Пушистик
  № 3  
Пушистик
Bumble Bee
 
Аватар для Пушистик

Регистрация: May 2003
Адрес: Третья планета от Солнца
Сообщений: 1,254
Отправить сообщение для Пушистик с помощью ICQ
Цитата:
Подскажите, пожалуйста, как rover получает свойство name.
наследование свойств от класса/создание надкласса:

Dog.prototype.__proto__ = Pet.prototype;

Цитата:
Почему просто this.Pet (name); - не читает? Что передается в случае this.Pet (name); ?
чё это ваще за синтаксис такой?

обычно чатаются свойства от созданных объектов на основе класса!
в данном случае - это rover!

trace(rover.legs);


после создания надкласса можно проверить что Dog получил все свойства:

myDog = new Dog();
trace(myDog.legs);


Цитата:
Я не понимаю как работает:

this.$_base = Pet;
this.$_base (name);
delete (this.$_base);
сам до конца не понимаю!определение надкласса как метода Dog с передачей аргумента - это понятно для чего!


но для чего потом delete (this.$_base); мне не понятно!
__________________
Portfolio

Старый 20.11.2003, 16:28
Пушистик вне форума Посмотреть профиль Отправить личное сообщение для Пушистик Посетить домашнюю страницу Пушистик Найти все сообщения от Пушистик
  № 4  
Пушистик
Bumble Bee
 
Аватар для Пушистик

Регистрация: May 2003
Адрес: Третья планета от Солнца
Сообщений: 1,254
Отправить сообщение для Пушистик с помощью ICQ
О!теперь понятно!
__________________
Portfolio

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

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

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

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Dear Nox Noctis и Пушистик,
если разбирать

this.$_base = Pet;
this.$_base (name);
delete (this.$_base);

1) rover получает свойство $_base со значением Pet (это что, правда такое значение может быть?)
2) rover вызывает метод Pet, передавая параметр name.
3) Pet навешивает на rover свойство name со значением параметра.
4) this.$_base удаляется как больше не нужный.

Верно?

Тогда почему нельзя написать просто this.Pet (name); ?

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

Регистрация: Aug 2001
Сообщений: 4,121
потому что в классе Dog НЕТУ такого метода - Pet...

я вообще-то не очень понимаю что имел в виду дебройль, написав такую запутку... не понятно зачем :) (можно цитату из книги ?)

получается что ты временно содаешь метод в объекте класса Дог, потом после его вызова тут же его удаляешь...

и при этом еще используешь прототип класса Pet как родительский для Dog... хотя только что использовал Pet как непонятно что, а не по оопшному назначению...

короче фигня какая-то.
все работает, это да, но нафига так ? :))


Последний раз редактировалось Nox Noctis; 20.11.2003 в 19:34.
Старый 20.11.2003, 19:55
iLoveYou вне форума Посмотреть профиль Отправить личное сообщение для iLoveYou Найти все сообщения от iLoveYou
  № 8  
iLoveYou
wanted

Регистрация: Sep 2002
Сообщений: 1,737
ааа.. дебройлевские примеры "Жизнь вокруг нас"...
на вскидку:
Dog = function( name ){
this.$_base = Pet;
this.$_base (name);
delete (this.$_base);
}
Dog.prototype.__proto__ = Pet.prototype;
это есть вызов для данного объекта конструктора родительского класса с передачей ему параметра; свойство name в Pet назначается и наследуется объектом класса Dog при его создании.
все, конечно, очень условно, пример явно не слишком удачный. но это Дебройль -- -->обучение принципам. может, кто поправит?

Старый 20.11.2003, 20:00
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 9  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Nox Noctis,
Цитата:
я вообще-то не очень понимаю что имел в виду дебройль, написав такую запутку... не понятно зачем (можно цитату из книги ?)
Цитата:
Примечание

Конструктор фактически ничего не знает о каждом конкретном экземпляре, однако он догадывается о том, что с помощью оператора new создается новый безымянный объект. Проще говоря, он "думает", что this указывает на некий объект, который будет создан.



Мы знаем, что this в конструкторе Dog указывает на его воплощение - rover (см. Примечание). Мы также знаем, что когда объект вызывает метод, this в методе указывает на вызывающий объект. Что нам мешает превратить Pat в метод экземпляра rover и запускать его оттуда? Другими словами, rover будет заключать в себе код конструктора Pet как одно из своих свойств и мы просто попросим rover запустить свой же метод. Давайте скажем это в третий раз: rover съел, проглотил Pet и теперь он внутри него, оттуда мы его и запустим. Теперь, когда метод(!) Pet запустится, this будет указывать на rover, поэтому все свойства, добавленные через this, добавляются к rover. Когда метод Pet отработает, он нам уже будет ни к чему, его смело можно удалить. Причем, нам совершенно не обязательно называть его Pet, его код должен быть таким же, а имя может быть любым. Таким любым, что вы должны быть абсолютно уверены в том, что нигде его не используете в программе как свойство объекта, ведь мы его совсем скоро удалим. Вполне подойдет имя $_base (просто base не подойдет, иначе все ваши base будут лежать в мусорной корзине).
Цитата:
и при этом еще используешь прототип класса Pet как родительский для Dog... хотя только что использовал Pet как непонятно что, а не по оопшному назначению...
Pet - я еще использую как, типа, метод для экземпляров Dog.

Старый 20.11.2003, 20:06
iLoveYou вне форума Посмотреть профиль Отправить личное сообщение для iLoveYou Найти все сообщения от iLoveYou
  № 10  
iLoveYou
wanted

Регистрация: Sep 2002
Сообщений: 1,737
да, я не мог сказать так красноречиво, как Дебройль =))))
то, что написано, по-моему, все объясняет и раскладывает по полочкам.
dm_nev, может, мы тебе с чем-то конкретным поможем? какая проблема-то?

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

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

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


 


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


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