Macromedia Flash 5. Объектно - ориентированное программирование




Метод Callee - часть 2


trace( arguments.callee.name );

Это может быть очень полезно для отладки. Нахождение прототипа класса изнутри активированного объекта тоже не представляет трудности - arguments.callee.prototype. Arguments.callee также показывает метод, которым можно найти имя его метода, опять-таки простым использованием arguments.callee. Это не так полезно, поскольку свойства у методов обычно не прикрепляются ни к объекту с именем метода, ни к объекту прототипа, поэтому ссылки на эти объекты обычно не требуется. Кроме того, не существует надежного способа, которым метод находил бы объект с именем класса, к которому он принадлежит (за исключением прописывания ссылки вручную), что значительно ограничивает полезность применения arguments.callee в конструкторе. (Получить имя класса метода изнутри метода можно с использованием this.__proto__.constructor.x или, если наследование имеет два уровня глубины, с использованием this.__proto__.__proto__.constructor.x, но при этом у вас нет возможности убедиться в том, сколько уровней глубины имеет ваш метод.)

Ниже приводится пример кода для экспериментирования. Вероятно, callee покажется вам наиболее полезной при проверке структур и отладке.

Class = function() { // найти класс из конструктора trace( "Class: " + arguments.callee.x ); // Вывод: Class: объект с именем класса

// найти прототип класса из конструктора trace( "Class.prototype: " + arguments.callee.prototype.x); // Вывод: Class.prototype: прототип класса }

Class.x = "Class name object"; Class.prototype.x = "Class prototype";

Class.prototype.method = function() { // найти имя метода из внутреннего метода trace("method: " + arguments.callee.x); // Вывод: method: объект с именем метода

// найти статические свойства класса из метода trace("method: " + this.__proto__.constructor.x); // (работает, только если класс на один уровень выше экземпляра) } Class.prototype.method.x = "method name Object";

aa = new Class(); // Конструктор теста aa.method(); // Метод теста

<<

   ООП во Flash 5    >>




Содержание  Назад  Вперед