Форум 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=51735)

Whatsername 26.11.2003 10:56

Ага, Nox Noctis, именно поэтому в прототипе класса нужно указывать методы к которым экземпляры этого класса могут обращаться?
Иначе для в каждом классе придется создавать такой вот $_base...

Whatsername 26.11.2003 16:11

Я понял:
у Ровера нет ПЕТ
У this в ДОГе нет ПЕТ
словом - у ДОГа нет ПЕТ. (именные пространства (область видимости), это так называется?)
Боже, как хорошо, что у ДОГа нет ПЕТ :D
Спасибо, Nox Noctis, сила_твоего_духа = истина; :D
Спасибо.

Nox Noctis 26.11.2003 18:41

настоящий джыдай :)
да пребудет с тобой Сила... :)

Whatsername 27.11.2003 19:19

назад в будущее
 
Nox Noctis, я сегодня получил ответ от Дебройля :eek:
Посмотри-ка: полный undefined :confused:

Цитата:

When you call Guru from the Pro class, it returns the result to the pro instance, but the 'this' in Pro is not the same as the 'this' in Guru. One represents the 'Pro' instance, the other the 'Guru' instance. So you could say


Guru = function (name) {
this.name = name;
}
Pro = function (name){
this.guru1 = Guru(name);
}
p = new Pro("test");
trace(p.guru1.name); // test

If you wan't those classes to be related, you have to use inheritance. Then Pro would inherit from Guru, and it would look something like:

Guru = function (name) {
this.name = name;
}
Pro = function (name){
super(name);
}
Pro.prototype.__proto__ = Guru.prototype;
Pro.prototype.__constructor__ = superclass;

p = new Pro("test");
trace(p.name); // test

Hope you are keeping warm this winter - not sure what part of Russia you are in... It has been too warm here this year (Manitoba Canada), we only got our ice rink finished today : (.

Cheers,
Robin

Nox Noctis 27.11.2003 19:38

ну вооот :) все то же самое... тлько тут он еще дополнил примером с super()

вот это как раз правильное наследование.

а вариант когда функцию делают методом - это тоже способ добиться того же результата, но никакого там наследования нет :)

в книге он немного смешал оба варианта... то есть наследование и "не-наследование" :)

Whatsername 27.11.2003 21:18

Код:

Guru = function (name) {
this.name = name;
}
Pro = function (name){
this.guru1 = Guru(name);
}
p = new Pro("test");
trace(p.guru1.name); // undefined а не test


Nox Noctis 28.11.2003 00:53

ааа... ты вот о чем...
у блин :) а я в конце рабочего дня не понял нифига..
похоже, тут маэстро слегка лажанулся...

когда пишешь то что хорошо знаешь, очень лениво проверять что написал, это понятно :))

я думаю, он хотел сказать так:

Код:

Guru = function (name) {
this.name = name;
}
Pro = function (name){
this.guru1 = new Guru(name);
}
p = new Pro("test");
trace(p.guru1.name); // test

вобщем, видимо приморозило его слегка :)

Nox Noctis 28.11.2003 01:10

и с супером он тоже того... мимо кассы... :)

super без указания имени метода должен вызвать такой же метод в над-классе... то есть в над-классе, в его коде, должен бы вызваться метод Guru.prototype.Pro... но его там, увы, нет :)
Код:

Guru = function () {
};
Guru.prototype.ad_astra = function(name) {
        this.name = "Guru : "+name;
};
Pro = function (name) {
        super.ad_astra(name);
        trace(this.name);
        this.ad_astra(name);
        trace(this.name);
};
Pro.prototype.ad_astra = function(name) {
        this.name = "Pro : "+name;
};
Pro.prototype.__proto__ = Guru.prototype;
Pro.prototype.__constructor__ = Guru;
p = new Pro("test");

...это иллюстрация работы super()

как врубишься - отправь ему ответ с комментариями :) а то вдруг мы не догнали какой-то хитрой задумки на самом деле... :))

Whatsername 28.11.2003 10:47

Да, Nox Noctis, обязательно сообщу о результатах.
Во как бывает, ё-моё :D

Whatsername 03.12.2003 14:13

Nox Noctis, теперь Он тоже знает как это работает :)
Цитата:

Sorry typo : ). It should be
this.guru1 = new Guru(name);

That is is you want composition. If you want inheritance, you should probably use the second method, or use the following function:

Function.prototype.raExtends = function (superclass)
{
this.prototype.__proto__ = superclass.prototype;
this.prototype.__constructor__ = superclass;
ASSetPropFlags(this.prototype, ["__constructor__"], 1);
}

..and then say:

Pro.raExtends(Guru);

If you use 'new' there are a few problems, mostly it runs the superclass constructor while defining methods.


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

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