Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   this это (http://www.flasher.ru/forum/showthread.php?t=205404)

alexandrratush 03.12.2013 14:39

Цитата:

Как "экземпляр может выполнить код", если это грубо говоря только ссылка на объект.
Экземпляр может выполнить код разве что так: spaceship3.x = 50; ну об этом я и написал.
Я имел ввиду это:
Код AS3:

// Метод перемещает корабль
public function moveShipY(value: Number):void
{
  // Перемещаем наш корабль
  this.y += value;
}

Тут перемещается только тот корабль, над которым вызван метод moveShipY, а не все созданные экземпляры. Если есть spaceship1 и spaceship2, и мы вызовем метод
Код AS3:

spaceship2.moveShipY(20);

, то переместиться только spaceship2.

Добавлено через 9 минут
Цитата:

А чтобы засунуть в класс Spaceship ссылку на spaceship3, то это уже... какие-то рекурсивные извраты, разве нет? : )
Это делать и не надо, для этого и есть this. Пример:
Код AS3:

var ship: Spaceship = new Spaceship();
ship.name = 'корабль1';
 
var ship2: Spaceship = new Spaceship();
ship2.name = 'корабль2';

Метод getName класса Spaceship возвращает имя корабля:
Код AS3:

public function getName():void
{
  trace(this.name);
}

И если вы сделаете так:
Код AS3:

ship.getName();   // корабль1
ship2.getName();  //// корабль2

То есть метод getName знает над каким экземпляром он был вызван, с помощью того же this.

Fogflasher 03.12.2013 16:16

Ок, спасибо, теперь понятно, что вы изначально имели ввиду.

vlbuto 03.12.2013 17:33

Я вынес только то, что если я допустим хочу создать метод в классе, который изменяет например координату объекта, то получается я не могу обратиться к самому классу, зато могу использовать this, вроде правильно понял:
Код AS3:

package Classes_Obj
{
        import flash.display.MovieClip;
 
        public class Stenka extends MovieClip
        {
                //private var kvadr:Kvadrat = new Kvadrat();
 
                public function Stenka()
                {
                        trace("Stenka");
                        for(var i:int = 0; i<3; i++)
                        {
                                var kvadr:Kvadrat = new Kvadrat();
                                kvadr.y += i*kvadr.width;
                                addChild(kvadr);
                        }
                        for(var i1:int = 0; i1<3; i1++)
                        {
                                var kvadr1:Kvadrat = new Kvadrat();
                                kvadr1.y += i1*kvadr1.width;
                                kvadr1.x = stage.width;
                                addChild(kvadr1);
                        }
                }
                public function dvizhenie()
                {
                        this.y +=1; // ЗДЕСЬ ПРОИЗОЙДЕТ ИЗМЕНЕНИЕ КООРДИНАТЫ ЭКЗЕМПЛЯРА.
                }
        }
}

Спасибо всем !!!!!!!!


Часовой пояс GMT +4, время: 05:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.