Анонимная функция , если вызывается напрямую, распространяется на глобальный объект . Если вы проследите this
внутри него, вы увидите [object global]
вместо [object B]
, как если бы это указывало на b
.
Обычный обходной путь - использование замыкания:
var self:A = this;
return function():void {
if(self is C) {
trace("C");
} else {
trace("not C");
}
}
Обратите внимание, однако, что экземпляры-члены класса, определяющего анонимную функцию, доступны изнутри. Это работает, потому что они разрешаются во время компиляции.
изменить в ответ на вопрос Амаргоша:
Да, this
указывает на глобальный объект, но это не значит, что вы не можете получить доступ к членам экземпляра объявленного класса. Этот маленький кусочек кода должен объяснить детали:
package {
import flash.display.Sprite;
public class Test extends Sprite {
private var foo:String = "foo";
public function Test() {
var anonymous:Function = function ():void {
trace(foo);//foo
trace(this.foo);//undefined
};
anonymous();
}
}
}
Greetz
back2dos