"это" не определено - PullRequest
1 голос
/ 23 июля 2010

Я разработчик Java / PHP, помогающий кому-то с actioncript. Я не понимаю, почему «это» не определено в приведенном ниже коде. это всего лишь фрагмент кода, но, надеюсь, он дает представление о том, где я пытаюсь сослаться на «это». Я пытаюсь выяснить, какой фильм движется подростком, чтобы я мог загрузить следующий фильм. Подростки используются для перемещения фильмов в экран и из него.

var tween_move_1:Tween = new Tween(movie_0, "_x", Strong.easeOut, 1600, 150, 0.5, true);

tween_move_1.onMotionFinished = function() {
    stop();
    setTimeout(function () {
        trace(this);//when trace runs it shows undefined
        var tween_move_2:Tween = new Tween(movie_0, "_x", Strong.easeOut, 150, 1600, 0.5, true);
        tween_move_2.onMotionFinished = function() {
        var tween_move_1:Tween = new Tween(movie_1, "_x", Strong.easeOut, 1600, 150, 0.5, true);
        };
    }
    ,2000);//end of setTimeout
};//end of tween.onMotionFinished

UPDATE! Вот рабочий код после применения советов из ответов / ответов:

var tween_move_in:Tween = new Tween(movie_0, "_x", Strong.easeOut, 1600, 150, 0.5, true);   
tween_move_in.onMotionFinished = function() {
    stop();
    var tweeny = this;//create reference to this so it can be used in setTimeout()
    setTimeout(function () {
         var movie = tweeny.obj;//use ref to get the movie affected by the tween
         var movieName:String = movie._name;
         var splitArray = movieName.split("_");
         var index = parseInt(splitArray[1]);
         var tween_move_out:Tween = new Tween(_root["movie_"+index], "_x", Strong.easeOut, 150, 1600, 0.5, true);
         tween_move_out.onMotionFinished = function() {
              var tween_move_in2:Tween = new Tween(_root["movie_"+(index+1)], "_x", Strong.easeOut, 1600, 150, 0.5, true);
         };
    }
    ,2000);//end of setTimeout
};//end of tween.onMotionFinished

Ответы [ 3 ]

0 голосов
/ 23 июля 2010

Если конкретный this, который вы хотите передать, это тот, который доступен в области, в которой вы определили tween_move_1, затем создайте другую локальную переменную, заполните ее this и используйте вместо этого эту новую переменную.

var tween_move_1:Tween ...
var foo:* = this;
...
    setTimeout(function () {
        trace(foo);
0 голосов
/ 23 июля 2010

Если вы пытаетесь отследить tween_move_1, вы можете обратиться к нему прямо внутри setTimeout().

0 голосов
/ 23 июля 2010

хорошо, вот что случилось ...

при использовании new function () {this} как в SetTimeout(function () { и т. Д.

Это создает пустой (неопределенный) объект, этот объект не совпадает с объектом, вызывающим функцию

Хотя я не могу сказать вам, что вы должны делать, поскольку я не знаю, что вы пытаетесь сделать, я надеюсь, что это поможет вам разобраться.

однако вы можете либо ссылаться на функцию (var foo: Function ...) и передавать переменную foo ($ var: Type)

...