![]() |
|
||||||||||
|
|
|
|||||
|
Guest
Сообщений: n/a
|
В FrameActions пишем такой скрипт:
0[0]=0(0); Хотя смысла в этом скрипте нет никакого, но такие выражения допускаются в AS (!!!!). Запускаем на выполнение... получаем swf... декомпилируем flasm'ом- получаем: frame 0 push 0.0, 0.0, 0.0, 1 callFunction setMember end // of frame 0 ОПА!!! Откуда взялась единица????!!!! В выражении её нет и в помине!!! Вот если бы мы записали выражение в виде: 0[0]=1(0); тогда всё было бы точно, а так получается, что в AS 0==1 (!!!) Забавно... Более того.... можно записать это выражение в виде 0[0]=N(0) где N- числовой литерал (любое целое число) и при этом результат всё равно будет один и тот же: frame 0 push 0.0, 0.0, 0.0, 1 callFunction setMember end // of frame 0 те в AS любое целое число равно единице!!!! ....... Как говорила Алиса "... чем дальше - тем чудесатее и чудесатее..." ![]() PS. Кстати... Сравнение - 0[0]==0(0) даёт true!! Те одна полная фигня равна другой полной фигне... Отсюда вывод - программе по-фигу какую фигню Вы в неё напишите..... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
|||||
|
сабж (только без обид).
Единица это количество параметров передаваемых функции с именем "0". Цитата:
PS Кстати ничего абсурдного в записях типа 0[0] и 0(0) нет. Функции и переменные с такими именами существовать могут. this['0'] = function(n) {
trace("\tФигню говорите, адназначно ! Аргумент равен "+n);
}
0(1812);
![]()
__________________
Wbr, CyberMax |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Да ладно вам, пацаны, я недавно [i] написал (с пустотой перед скобками), чтобы опустить мешающий this - снямало... правда, эээ, не сработало...
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Guest
Сообщений: n/a
|
Звиняте, господа...Звиняйте.... Обшибочка-с вышла-с.....
Действительно, "1" - это количество параметров функции.... Всё правильно... да.... Всё правильно....... .....Только постойте!!!!! Количество параметров ЧЕГО????? Где, скажите пожалуйста, ИМЯ вызываемой функции?? А?? Если мы запишем 0[0]=foo(0) то получим при декомпиляции flasm'ом - frame 0 push 0.0, 0.0, 0.0, 1 , 'foo' callFunction setMember end // of frame 0 Это понятно...... А в нашем случае - где имя функции???? Нету!!!!!! Поэтому AS по-фигу, чему равно N в выражении 0[0]=N(0) N может равнятся любому числу (кстати, не только целому), результат от N не зависит!!!! Это и ввело меня в заблуждение...Так что мой глюк я могу смело разделить с господами из Micromedia.. ![]() 2CyberMax ... То что такие операции (записи) в AS допустимы - я знаю. Об этом я сказал в начале предыдущего сообщения... Вообще в AS много "интересных" допустимых грамматикой операций.... Ну, например, навскидку.... ~void null; flasm даёт - frame 0 push NULL pop push UNDEF, 4294967295.0 bitwiseXor pop end // of frame 0 что в переводе означает, что производится операция - undefined^0xffffffff Ну ничего не боится AS!!!! Ему по-фигу.... ![]() Ещё..... Когда пишешь this['0'] не обязательно заключать ноль в кавычки (те считать ноль строкой). Можно написать и this[0] (те считать ноль числом) - это тоже самое... Согласно ECMA-262 - ................ ObjectLiteral : See 11.1.5 { } { PropertyNameAndValueList } PropertyNameAndValueList : See 11.1.5 PropertyName : AssignmentExpression PropertyNameAndValueList , PropertyName : AssignmentExpression PropertyName : See 11.1.5 Identifier StringLiteral NumericLiteral ............................ Те именем свойства объекта может быть и численный литерал..... И ещё .... О той функции, что ты привёл в качестве примера.... Согласно вышеизложенному эта функция работет только в том варианте, что у тебя записана .... this[0]=function(){.......}; вызываем -> 0();(или что ТОЖЕ САМОЕ null(); )--> получаем результат... Если мы запишем this[1]=function(){.......}; и вызовем ТАКУЮ функцию -> 1(); то получим полный фиг-вам....!!!! Функция то в наличии имеется, а вот вызвать её - не получится...... Насчёт моего PS. Это, конечно, была шутка... Хотя, как говорится. в кождой шутке есть только ДОЛЯ шутки... Просто в голове не укладывается что сравнивая две НЕОПРЕДЕЛЁННЫЕ величины мы получаем ИСТИНА... В голову приходит такая сценка.... ![]() "..... Судья- ... господа присяжные заседатели... Неустановленное лицо в неустановленное время в неустановленном месте совершило , а может быть и не совершило, неустановленное деяние.... Вы должны вынести вердикт - виновно ли это лицо..... Присяжные (хором)- ...ДА!! ДА!! Виновен!!!!....Виновен!!!!.... Судья- ...На основании вердикта присяжных суд выностит приговор!!! Неустановленное лицо приговаривается к неопределённому сроку в неопределённом месте с произвольным режимом... " Ну не абсурд ли??? А??? ![]() Мне кажется, что было бы более логичным, если бы в операциях сравнения (Х rel_op Y) при значении одного из операндов X или Y (или обоих вместе) 'undefined' результат тоже был бы 'undefined'. Те, если нет информации для принятия решения, то результат - неопределён.Конечно, этому препятствует то, что в булевой логике есть только два значения - true и false. Но в конце концов - почему бы не отойти от булевой логики и не ввести в логику третье значение - (true, false, UNDEFINED)!!! Инструкция IF, например, могла бы выглядеть тогда следующим образом - IF (condition) E_TRUE Statement1 E_FALSE Statement2 E_UNDEF Statement3; Statement1 выполняется когда значение condition==true Statement2 выполняется когда значение condition==false Statement3 выполняется когда значение condition==undefined Why not???? как говорится.... Есть же на белом свете "fuzzy" логика??? И, говорят, прекрасно работает........Ладно... Всё это уже мои фантазии на тему... Пойду-ка я, лучше, почитаю про "fuzzy" логику ... Может что интересное узнаю.... Всем - пока! PS 2DeliMIter Смотрим ECMA-262 - ...... ArrayLiteral : See 11.1.4 [ Elision_opt ] [ ElementList ] [ ElementList , Elision_opt ] ElementList : See 11.1.4 Elision_opt AssignmentExpression ElementList , Elision_opt AssignmentExpression Elision : See 11.1.4 , Elision , ....... так что ничего удивительного в том, что выражение -> [i] схавало - нету ... Это ArrayLiteral....... ![]() |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Guest
Сообщений: n/a
|
2DeliMIter
Ты наверное имел в виду ???? Да... я ошибся.... такую функцию можно вызвать вышеописанным способом.... Я это понял утром, когда проснулся... Но было уже поздно.. ![]() Воистину говорят - "Утро вечера мудреннее". С уважением. Suhoff. |
![]() |
Часовой пояс GMT +4, время: 16:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|