Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   ООП: (зажмурившись) ммм.. ИнХерИтАнс.. (http://www.flasher.ru/forum/showthread.php?t=50595)

iLoveYou 27.10.2003 18:12

ООП: (зажмурившись) ммм.. ИнХерИтАнс..
 
всей душой и телом приветствую любителей глубокого флеш-программирования на этом скромном форуме. вашему вниманию предлагается небольшая задача. она совсем простая: нужно всего лишь ознакомиться со следующим кодом и не задумываясь ответить на пару пустячковых вопросов. итак, код в студию:
Код:

function SuperClass() {
        trace("SuperClass constructor called");
        this.__proto__.f1 = function() {
                trace("f1 called");
        };
        this.f2 = function() {
                trace("f2 called");
        };
}
function SubClass() {
        trace("SubClass constructor called");
}
SuperClass.prototype.__proto__.f3 = function() {
        trace("f3 called");
};
SubClass.prototype.__constructor__ = SuperClass;
obj = new SuperClass();
trace("---------------");
obj.f1();
obj.f2();
obj.f3();
trace("******************************");
obj2=new SubClass();
trace("---------------");
obj2.f1();
obj2.f2();
obj2.f3();

Ну а теперь вопросы:
1) какую строчку (всего одну) нужно добавить в этот незатейливый код, чтобы методы f1() и f2() могли быть вызваны и для объектов класса SubClass?
2) совсем просто: в чем различия реализации методов f1(), f2(), f3()?
3) черт, только сейчас заметил: если удалить
Код:

SubClass.prototype.__constructor__ = SuperClass;
метод f3() все равно вызывается; к чему бы это?
Первому ответившему на все вопросы верно будет присвоено звание глубокого флеш-программиста и памятный значок с дарственной надписью "Я люблю ПротивныеТипы".

ЗЫ пользователи ||||||||||, lexass, Baltika, DeliMiter, Nox Noctis к участию не допускаются.

ЗЗЫ просьба не воспринимать слишком серьезно -- все равно призов на всех не хватит.

2K WebStudio 27.10.2003 21:58

пункт 1:
ты хочешь, чтобы в outpute было вот это?
SuperClass constructor called
---------------
f1 called
f2 called
f3 called
******************************
SubClass constructor called
---------------
f1 called
f2 called
f3 called
Так?

iLoveYou 27.10.2003 22:16

ты б мысль не заканчивал на полуслове. и еще: раз уж взялся за задачку, то, пожалуйста, с объяснениями и поподробней, да.

sergwizard 27.10.2003 23:04

1. Я бы написал все это так:
Код:

function SuperClass() {
        trace("SuperClass constructor called");
        this.__proto__.f1 = function() {
                trace("f1 called");
        };
        this.f2 = function() {
                trace("f2 called");
        };
}
function SubClass() {
        trace("SubClass constructor called");
}
SubClass.prototype.__proto__.f3 = function() {
        trace("f3 called");
};
SubClass.prototype = new SuperClass();
obj = new SuperClass();
trace("---------------");
obj.f1();
obj.f2();
obj.f3();
trace("******************************");
obj2=new SubClass();
trace("---------------");
obj2.f1();
obj2.f2();
obj2.f3();

2. реализация методов f1(), f2(), f3() видна из записи.
3. Эта строчка нихрена не значит.

2K WebStudio 27.10.2003 23:13

Знаешь что чувак!
Такой попсы я давно не видел!!!
Вот те скрипт:
function SuperClass() {
trace("SuperClass constructor called");
}
SuperClass.prototype.__proto__.f1 = function() {
trace("f1 called");
};
SuperClass.prototype.f2 = function() {
trace("f2 called");
};
function SubClass() {
trace("SubClass constructor called");
}
SuperClass.prototype.f3 = function() {
trace("f3 called");
};
SubClass.prototype = SuperClass.prototype;
obj = new SuperClass();
trace("---------------");
obj.f1();
obj.f2();
obj.f3();
trace("******************************");
obj2 = new SubClass();
trace("---------------");
obj2.f1();
obj2.f2();
obj2.f3();

А вот те ссылка на самый простой справочник на эту тему!!!

iLoveYou 27.10.2003 23:17

Цитата:

SubClass.prototype = new SuperClass();
гы заменять строчки нельзя ;) нужно только добавить.
Цитата:

2. реализация методов f1(), f2(), f3() видна из записи.
ну да, видна, но тут нужны пояснения :)
Цитата:

3. Эта строчка нихрена не значит.
емкая, конечно, фраза. но ответа на поставленный вопрос она не дает.
и вообще, Визард, почему я тебя не включил в список досрочно дисквалифицированных?

2K WebStudio 27.10.2003 23:21

Теперь ответь мне!
Книжек надо больше читать!
Фигня какая-то, а не скрипт!
Посмотри на ссылке создание объектов!

iLoveYou 27.10.2003 23:50

2K WebStudio
ага, вот ты-то мне и нужен.
ты не ответил ни на один из поставленных вопросов и, более того, породил у меня новые.
1) какую смысловую нагрузку несет следующая запись:
SubClass.prototype = SuperClass.prototype;
2) почему ты определяешь методы так по-разному:
Цитата:

SuperClass.prototype.__proto__.f1 = function() {
trace("f1 called");
};
и
Цитата:

SuperClass.prototype.f2 = function() {
trace("f2 called");
};
ЗЫ книжками отмазываться не нУно.

2K WebStudio 27.10.2003 23:55

Делаю это отдельно т.к. так меньше оперативки жрёт!
Кажется, там это написано!!!
А без этой строки, естественно ничего не пашет!

iLoveYou 28.10.2003 00:05

вот я сейчас пытаюсь для себя решить: ты намеренно флудишь или действительно не понимаешь, вообще о чем идет речь.
либо внимательно прочти первое сообщение и попытайся ответить на поставленные вопросы, либо не засоряй эфир.
+ дополнительные вопросы повисли:
1) какую смысловую нагрузку несет следующая запись:
SubClass.prototype = SuperClass.prototype;
2) почему ты определяешь методы так по-разному:
--------------------------------------------------------------------------------
SuperClass.prototype.__proto__.f1 = function() {
trace("f1 called");
};
--------------------------------------------------------------------------------
и
--------------------------------------------------------------------------------
SuperClass.prototype.f2 = function() {
trace("f2 called");
};
--------------------------------------------------------------------------------


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

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