Форум 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)
-   -   ошибка обращения к undefined (http://www.flasher.ru/forum/showthread.php?t=184763)

ISergey 26.09.2012 13:29

ошибка обращения к undefined
 
Добрый день.
Подскажите, можно ли во Flashdevelop (проект AS2) отловить ошибку при обращении к undefined объектам?
Т.е. цель получать некий сигнал об этом, способом, отличном от явной проверки на undefined.
(Проект растет, много отладочного кода ухудшают восприятие логики, а механизм сигнализирования помог бы из абстрактного "почему не работает" сразу отвечать на вопрос "почему объект неопреден?"

iNils 26.09.2012 23:11

В as1 была такая возможность с помощью resolve
Код AS1/AS2:

MovieClip.prototype.__resolve = function (f) {
        trace ("FUNCTION '" + f + "' NOT FOUND");
};
_root.dge ();

Типа пытаемся вызвать метод dge и если он не определен, то вызывается __resolve.
Можно попробовать использовать его.

ISergey 27.09.2012 01:49

Спасибо, почитал, то что нужно.
Вроде можно даже применять не только к MovieClip но в целом к Object'у
Код AS1/AS2:

Object.prototype.__resolve = ...

а "вроде", потому что ни 1-й ни 2-й вариант компилятор проглатывать не захотел.
как только появлется такая конструкция - проект зависает.
Может проблема в использовании Mtasc?? (v1.14)

iNils 27.09.2012 14:02

Я давно не работал с as1/as2 и mtasc, не помню была ли у меня подобна проблема.

ISergey 27.09.2012 16:34

спасибо и на этом. подниму вопросом в ветке as1/2, может кто и сталкивался.

ISergey 27.11.2012 16:16

решение оказалось следующим (FD, проект AS2)
попинал свою невнимательность, добавил подчеркивание в совет выше
Код AS1/AS2:

Object.__proto__.__resolve = function (f:String) {
trace ("FUNCTION '" + f + "' NOT FOUND");
}

еще вариант: читаем внимательно документацию по __resolve, смотрим рабочий пример для конкретного объекта
Код AS1/AS2:

// новый объект
var myObject:Object = new Object();
 
// определим __resolve функцию
myObject.__resolve = function (name) {
  return "Hello, world!";
};
trace (myObject.property1); // output: Hello, world!
trace (myObject.property2); // output: Hello, world!



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

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