PDA

Просмотр полной версии : Область видимости свойства для обработчика


BigDan
12.07.2007, 14:08
Вся проблема в том, что обработчик события не видит переменную определённую в том же классе:
class Test
{
private var object:MovieClip;
public function Test(__object:MovieClip)
{
object = __object;
object.onMouseDown = onDown;
}
function onDown():Void
{
trace(object);//undefined
}
}

etc
12.07.2007, 14:10
Ну естесственно, ведь это AS2.
Delegate в помощь.

BigDan
12.07.2007, 14:23
сенкс

this.create
12.07.2007, 15:18
class Test {
private var object:MovieClip;
public function Test(__object:MovieClip) {
object = __object;
var ob:Test = this;
object.onMouseDown = function():Void {
trace(ob.object);
};
}
}

etc
12.07.2007, 17:27
this.create, никогда больше так не делай.

Molecula
12.07.2007, 17:37
А как лучше, так:

class Test
{
private var object:MovieClip;
public function Test(__object:MovieClip)
{
object = __object;
object.onMouseDown = Delegate.create(this,this.onDown);
}
function onDown():Void
{
trace(object);//undefined
}
}

Упс...забыл.

etc
12.07.2007, 17:40
Molecula, а код оформить?

this.create
12.07.2007, 17:47
this.create, никогда больше так не делай.
Почему? Вообще у Мука прочитал про этот способ...

etc
12.07.2007, 17:54
Почему? Вообще у Мука прочитал про этот способ...
Плохой это способ.

this.create
12.07.2007, 17:56
Плохой это способ.
Чем. Вы объясните, я сделаю вывод о применений этого приема на практике.

etc
12.07.2007, 17:58
— Объявление метода в методе;
— Паразитная переменная-ссылка;
— this ссылается не туда, куда нужно.

this.create
12.07.2007, 18:11
— Объявление метода в методе;
— Паразитная переменная-ссылка;
— this ссылается не туда, куда нужно.

метод в методе - это обработчик события? Т.е никакие обработчики внутри методов не допустимы? Делаем их дополнительными приватными методами класса и привязываем через Delegate?

паразитная ссылка - это не понятно.

а куда ссылается this? Я думал, что на экземпляр класса. Поэтому и свойства этого класса становятся доступными внутри вложенной в метод функции.

etc
12.07.2007, 18:16
Методов в методах быть не должно.
Паразитная ссылка — ссылка, ссылающаяся на this.
Внутри onMouseDown this ссылается не туда, куда нужно.

this.create
12.07.2007, 18:30
__etc
У меня с каждым вашим ответом воникают новые вопросы. Я пока ничего больше по этому вопросу не стану спрашивать пока. Почитаю еще Мука. Надо понять на чем основаны некоторые ваши утверждения. Например о том что нельзя делать методы в методах.

etc
12.07.2007, 18:35
На том, что это AS2, а не AS1. Общая организация всего должна быть правильной, а не такой, как в AS1.