Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вопрос по prototype и __proto__ (http://www.flasher.ru/forum/showthread.php?t=106789)

Волгоградец 18.01.2008 20:14

Вопрос по prototype и __proto__
 
Здравствуйте! Если у кого есть минутка - помогите разобраться. Часто в скриптах встречаю свойства __proto__ и prototype. В книге Гурского сказано - что использование этих свойств - это ООП в стиле AS 1.0. Т.е. насколько я понял это неактуально в случае AS 2.0, ведь любое наследование можно установить используя ClassTwo extends ClassOne. Получается эти свойства устаревшие и их лучше не использовать? Если не так - то зачем они нужны (если использую AS 2.0), в каких случаях применять?
P.S.: простите за ламерство.

chingachgoog 18.01.2008 20:43

Тут где-то была тема, в чем различие между AS1 и AS2.
Удивительно, но факт - многие этого не знают.

CrazyFlasher 18.01.2008 21:00

в принципе они бесполезны и без них легко обойтись

wvxvw 18.01.2008 21:38

В АС2 без них обойтись невозможно. Можно обойтись без обращений к ним - это да.
prototype.__proto__ - ссылка на родительский класс.
prototype - ссылка на данный класс.
Т.е. у любого созданного вами класса обязательно будут эти свойства.
Код:

class MyClass extends MovieClip {
        function MyClass(){}
}

Код:

var myClassInstance = new MyClass();

trace(MyClass.prototype instanceof MovieClip);
trace(MyClass.prototype.__proto__ instanceof Object);


etc 19.01.2008 03:12

Смотря для каких целей применяются эти свойства.

Волгоградец 19.01.2008 12:16

Всем спасибо, помогли.
__etc, в смысле для каких целей? Для написания скриптов! Точнее - для организации наследования.

etc 19.01.2008 14:17

Цитата:

Сообщение от Волгоградец
Точнее - для организации наследования.

Для этих целей применять хаки как-то бессмысленно.

wvxvw 19.01.2008 20:54

Ну, вот, пример для чего я иногда использую обращение к prototype:
Код:

AsBroadcaster.initialize(XMLNode.prototype);
XMLNode.prototype.__appendChild = ASnative(253, 4);
XMLNode.prototype.appendChild = function(xn:XMLNode){
        this.broadcastMessage('nodeAdded',xn);
        this.__appendChild(xn);
}
XMLNode.prototype.__resolve = function(p){
        if(!isNaN(p)){
                return this.childNodes[p];
        } else if(p.charAt(0)=='#'){
                return this.attributes[p.substr(1)];
        } else {
                var r_xml:XML = new XML();
                for(var i:Number=0; i<this.childNodes.length; i++){
                        if(p==this.childNodes[i].nodeName){
                                r_xml.appendChild(this.childNodes[i].cloneNode(true));
                        }
                }
                if(r_xml.childNodes.length==1){
                        return r_xml.childNodes[0];
                } else if(r_xml.childNodes.length>1){
                        return r_xml.childNodes;
                } else {
                        return;
                }
        }
}

var _xml:XML = new XML('<data><someNode attr="1"><someOtherNode/></someNode><someNode attr="2"/></data>');
_xml['addListener'](this);
trace(_xml['data']);
trace(_xml['data']['someNode']);
trace(_xml['data'][0]);
trace(_xml['data'][0]['#attr']);
trace(_xml['data'][1]['#attr']);
trace(_xml['data'][0]['someOtherNode']);
function nodeAdded(xn:XMLNode):Void {
        trace('_xml added:\r'+xn+'\rnode\r--------------------');
}

Просто писать свой аналог XMLNode + XML мне лень, да и как-то бесполезно это. Использовать XPath тоже не хочется, т.как очень громоздкий и неудобный. А так вполне пушисто получается =)
*Но я не призываю никого так писать* :D


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

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