PDA

Просмотр полной версии : Случайно заметил одну особенность...


Gaen
08.05.2007, 05:48
Может я конечно фигню тут написал, но чтобы выловить такую ошибку, понадобилось время. Поэтому стараюсь других от этого уберечь :D



myObj={};

myObj.test=function(){
trace(this);
}//myObj.test


_root.btn1.onPress=myObj.test;

_root.btn2.onPress=function(){
myObj.test();
}//_root.btn2.onPress



при нажатии на btn1 трейсится _level0.btn1
при нажатии на btn2 трейсится _level0.myObj

Тоесть если на одно и то же событие по-разному вешать функцию, this будет ссылаться в разные места

Kikasso
08.05.2007, 06:24
Ну так это не ошибка..
Попробуйте написать то же самое, но по-другому:

myObj={};
btn1.onPress = myObj.test = function(){
trace(this);
}
btn1.onPress(); // _level0.btn1
myObj.test(); // [object Object]

iNils
08.05.2007, 06:39
И что странного?
В первом случаи мы делаем ссылку на метод, кому он принадлежит не важно.
А во втором мы вызываем метод объекта.

7thsky™
08.05.2007, 07:08
вот почитай по теме - http://noregret.org/tutor/scope/

etc
08.05.2007, 11:30
Вот в AS3 область видимости остается за тем объектом, к которому «присобачен» метод, слава богу…