PDA

Просмотр полной версии : for (name in Math)


Amadeus
29.10.2001, 13:09
А вот почему этот скрипт ничего не трасирует?

onClipEvent (load) {
for (name in Math) {
trace (Math[name]);
}
}

Fisher
29.10.2001, 14:06
Что из Math? Клип в руте?
Тогда и пиши полностью _root.Math (просто так на всякий случай что бы хотябы вопрос был понятен).
Что ты хочешь увидеть? Все объекты в Math? Тогда и пиши правильно trace (_root.Math[name]._name);

Fisher
29.10.2001, 14:24
Вообщето Math служебный объект. Я тебя неправильно понял?

Amadeus
29.10.2001, 16:18
Угу.
Я вот для прикола хотел посмотреть все свойства
слжебного объекта Math...

john
30.10.2001, 02:01
Хорошо бы конечно :) но нельзя.
Может я скажу чушь, но мне думается что объекты типа Math созданы средствами C++ как следсвие со всем набором средств приватности и областей видимости. Менять можно через скриптовую оболочку, переопределяя ссылки на методы..... Но если можно переопределять то это уже не то...
В спецификации ECMA говорится что есть средства для управленя чтения-записи вот от туда все и идет я думаю.
Было бы не плохо иметь инструментарий управления видимости полей, а то вот в for..in .... он сволочь норовит в прототип забраться, и трейсит поля прототипов, приходится на всякие ухищьрения идти.
Это я так, ворчу

Amadeus
30.10.2001, 16:21
John,
а вот скажи, пожалуйста, что можно почитать в инете,
чтоб осознать практическую полезность ООП во Флэше.
Ты как-то говорил, если я правильно помню, что только объектный подход и используешь....

john
30.10.2001, 16:50
"практическую полезность ООП во Флэше" ммм ... хоть статью пиши :)
Все не так однозначно.
ООП, в полном его понимании нужено только для решения сложных задач, когда необходимо пользоваться абстракциями. Когда уже не в моготу и созданную тобой систему нельзя разбить на логичные куски, а их в свою очередь...
То есть если говорить о объектно ориентированному подходу к программированию во флэш, а не использовании объектных приемов.
А если таких задач не стоит то и смысла програмировать объектно нет.
Вторая мотивация которая может быть при использовании ООП это желание не переписывать каждый раз для похожих задач код заново, и обзавестись своими библиотечками. Тут тоже полезен ООП, когда объекты выступают в роли серверов и обеспечивают методы как сервисы. Чтобы не думать о начинке, а только пользоваться.
Третья мотивация которая может подтолкнуть к использованию ООП - это желание понимать и контролировать процессы происходяжие во флэш. Без этого будет неполное понимание. Ведь ясно что и JS и сами объеты плейера строятся в объектной ирархии, что функции это не некторые программки в мувиках.... Захочется переопределять, переписывать и добовлять свои методы.

Так что если будет нужно то обхектно ориентированно программировать захочется самому. Все зависит от задач.

john
30.10.2001, 17:01
по второму вопросу. об источниках.

На самом деле по JS и флэш в частности, как объетно ориентированным скриптовым языкам мануалов практически нет. И это правильно не настолько они сложны. Думаю что я описал в уроке на http://www.3wgraphics.com/experience/index.htm
вполне достаточно, картина достаточно ясна. Можно еще кое что добавить по механизмам взаимодействия билд-ин объектов и созданных, но это не особо важно. Ведь язык то скриптовый и это правильно зачем создвать себе проблемы.
Также полезно почитать спецификацию ECMA.
А лучший мануал это всетаки "Объектно-ориентированный анализ и проектирование" Гради Буча. Он уж точно поставит мозги на место.

ish
30.10.2001, 18:46
хм а на тему обьектов, полей и прочего принадлежащего какомунить классу.
например в МСИЕ можно получить список всех полей объекта плагина:
obj=document.flashId; //надеюсь понятно
list="<PRE>list:\n====\n";
for (element in obj) {
st+="name: <B>"+element+"</B> | value: <I>"+obj[element]+"</I>\n"
}
document.open();
document.write(list+"</PRE>");
document.close();

Однако любой обьект в МСИЕ наследует кучу стандартных полей и объектов, т.е. не все они могут быть полезными по применению к конкретному объекту.

В случае NN плагин взаимодействия браузера с флэш-объектом представляет собой java class. А как многим известно javascript NN очень тесно с онными контактирует.

При исполнении вышеописанного кода NN выведет ко всему тому еще и методы применимые к обьекту.

вот еще для наглядности (NN only):

obj=document.flashId.getClass().getMethods();
for(el in obj) {
alert(obj[el].getName());
}

или

alert(document.flashId.GetVariable($version).toSource());

Вообще если уж говорить о javascript и NN, то я выбираю именно NN а не MSIE.

john
30.10.2001, 19:40
2ish это все конечно понятно, но не совсем к теме вопроса,
Насколько я понимаю можно посмотрить неприватные поля и методы плейера,
А попробуй сделать трейс Math к примеру. :)

Amadeus
31.10.2001, 19:36
Джон,
а вот бы сделать так, чтоб изменять прототип не у всех мувиков сразу, а только у некоторых...

ish
04.11.2001, 09:42
Оригинал написал(а) john
2ish это все конечно понятно, но не совсем к теме вопроса,
Насколько я понимаю можно посмотрить неприватные поля и методы плейера,
А попробуй сделать трейс Math к примеру. :)

вобщето к теме ;)

а насчет примера, не слабо :)
что бы быть более убедительнее скажу, что например у прототипа обьекта MovieClip есть незадокументированная функция Meth(), а в XML.prototype среди прочего можно увидеть функцию Init() :)

john
04.11.2001, 17:06
2ish
ну тогда колись :)

john
04.11.2001, 17:22
вообще недокументированные возможности меня не сильно интересуют в принципе, две вещи которые полезны ASfunction _changed, причем больше первая, остальные скрытые функции это хорошо конечно, но не особо важно,
а то будешь переписывать все свои работы каждый раз под выход нового плейера.
А вобще интересно....
Насколько забраться так глубоко можно только в НН. Эксплорер не пустит.
Так что чтобы не быть голословным прошу продемонстрировать.
И еще, при открытом формате, и коде плейера... это все цветочки, я думаю.

ish
04.11.2001, 18:29
2john
это стеб :)

любой *приватный* обьект можно просмотреть путем последовательного перебора возможных символов в поле :))) меня хватило только до 4-го рязряда тестируемой строки :))
так что это не стоит отдельного внимания :)

что касается этих и многих других подобных незадокументированных функций, то это вспомогательные функции обьекта.
тот же meth() всеголишь выдает 1 если в качестве аргумента задан "GET"; 2 если "POST"; 0 в остальных случаях.
init() стандартная функция которая вызывается при создании обьекта XML.