Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Стандартные классы (http://www.flasher.ru/forum/showthread.php?t=189677)

am_devcorp 16.12.2012 00:43

Стандартные классы
 
(Не знаю насколько тема подходит данному подфоруму)

В одном из топиков велся разговор о работе с массивами, и я задался нижеследующим вопросом:
Возможно ли как-нибудь изменить поведение стандартных классов (я так же не знаю, какой термин подходит для описания группы классов, которые Array, Number, BitmapData, то есть тех, которые присутствуют во флеше изначально), при этом не наследуясь от них и не оверрайдя соответствующие методы?
Например, сделать чтоб Array в своем методе toString() возвращал не
Код:

1,2,3,4,5
а, к примеру,
Код:

[1,2,3,4,5]
для избегания путаницы с трейсом вложенных массивов?
Вообще, где хранятся эти классы? в playerglobal.swc? Просвятите меня, пожалуйста.

caseyryan 16.12.2012 01:38

Нельзя. Обязательно надо наследоваться и переназначать методы. Причем наследоваться можно только от тех классов, которые не являются финализированными. По-моему от Number нельзя унаследовать свой класс (хотя может я и не прав, точно не помню)
Цитата:

Вообще, где хранятся эти классы? в playerglobal.swc? Просвятите меня, пожалуйста.
Нигде не хранятся, они вшиты во флеш плеер, и написаны на С++

am_devcorp 16.12.2012 01:40

Великая печаль

iNils 16.12.2012 01:58

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

i.o. 16.12.2012 04:55

toString() у большинства стандарных классов прототипный, так что можно так:
Код AS3:

Array.prototype.toString = function() : String {
        return "[" + this.join(", ") + "]";
};
 
 
trace([1, 2, 3]);


iNils 16.12.2012 05:19

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

am_devcorp 16.12.2012 12:37

Цитата:

Сообщение от iNils (Сообщение 1110105)
Переопределение стандартных функций может привести к проблемам в другом месте, где ожидается стандартное поведение функции.

Ну это да, поэтому все хорошие люди и наследуются; но тут я сомневаюсь, что toString где-то вот так используется, что его переопределение кому-нибудь навредит.

wvxvw 16.12.2012 14:57

Кстати, с Array.toString() был связан баг, когда при вызове toString() у вложенных массивов можно было натолкнуться на бесконечный цикл (если массив сам в себя вложен), и в таких ситуациях, естесственно, получалось переполнение стека. Так что будте бдительны, если будете сами реализовывать.


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

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