Форум 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)

vlbuto 03.12.2013 02:57

this это
 
месяца 3 изучаю as3 но до сих пор не могу понять для чего нужно ключевое слово this.

Ув. форумчане подскажите пожалуйста, что это и с чем его едят.

Видео-урок человека, в котором он в основном файле (точке входа) прописывает private var const _this:*;
Далее в конструкторе главного файла прописывает _this = this;
Так вот, аналогично, в классе, каком либо, где описывается поведение объекта.
И далее все изменения производятся через даный _this.

Я вынес из всего этого, что this - эта область, в которой находится объект.

Но господа, так же в коллине муке, встречал пару-тройку абзацев, где this - уточнение свойства при передачи параметра в конструктор класса.

В общем запутался, расскажите поподробнее пожалуйста.


Заранее спасибо огромнейшее.

GBee 03.12.2013 03:02

this - ссылка на самого себя внутри себя. Есть у любого экземпляра любого класса.

Это как "Я" у каждого человека :о)

Цитата:

Видео-урок человека, в котором он в основном файле (точке входа) прописывает private var const _this:*;
Ужас.


PS А вот у Халка есть геттер обертка на this - Халк. И он через нее все делает. Халк.ломать(), Халк.злой(). Хотя это не читайте, я сам запутался. Халк скорее статический.

vlbuto 03.12.2013 03:12

Цитата:

Сообщение от GBee (Сообщение 1154080)
this - ссылка на самого себя внутри себя. Есть у любого экземпляра любого класса.

Это как "Я" у каждого человека :о)


Ужас.


PS А вот у Халка есть геттер обертка на this - Халк. И он через нее все делает. Халк.ломать(), Халк.злой(). Хотя это не читайте, я сам запутался. Халк скорее статический.

http://www.youtube.com/watch?v=AN4T9...44s2cdb9vXQNzA

Вот

GBee 03.12.2013 03:26

Цитата:

Вот
Больше не смотрите.

"Instead of dozens books" - тоже спорный лозунг с такой подачей материала.

vlbuto 03.12.2013 03:36

Цитата:

Сообщение от GBee (Сообщение 1154084)
Больше не смотрите.

"Instead of dozens books" - тоже спорный лозунг с такой подачей материала.

А вы можете посоветовать, что можно смотреть/читать, кроме Mook'a?

in4core 03.12.2013 03:49

Цитата:

Больше не смотрите.
Да это вообще пц! Такое ощущение , что это какой то прикол или вредительство! vlbuto - в данном видео говорится в таком вот ключе : цикл и массив - это одно и тоже, просто свойства разные - вот такой вот каламбур. Именно в таком ключе идет подача материала там.

Aquahawk 03.12.2013 12:09

this это явное указание на себя. Зачем нужно:
1. Представьте что у вас объект со свойствами x и y есть, а вы хотите добавить к нему метод setCoords для того чтобы ставить обе координаты сразу.
т.е. свойства у вас такие
Код AS3:

public var x:int;
public var y:int;
 
//и наш метод на оба сразу
public function setCoords(x:int, y:int):void {
        this.x = x;
        this.y = y;
}

В данном примере внутри функции есть по сути два x, это тот который параметр и тот который ваше свойство. Параметр функции обладает более высоким приоритетом, поэтому под именем x будет тот который параметр. И тут мы говорим компилятору, присвой это значение вон туда, в x который в объекте у нас. Как ему это сказать? Вот и говорим this.x = x.

Вариант два это когда нужно передать объект себя куда нибудь, не приведу сейчас простенького примера.

В итоге this это не какая то такая сложная штука и не так уж и часто применяемая. Он ещё нужен самому интерпретатору чтобы понимать для какого объекта вызван метод.

Код AS3:

public var x:int;
public var y:int;
 
public function traceCoords():void {
        trace(x,y);
}

Вот в данном примере trace(x,y); по сути автоматически заменится на
Код AS3:

trace(this.x,this.y);

Т.е. компилятор сам понимает что вы имели ввиду, вот и получается что явно указывать надо когда ему не понятно(см первый пример). Вот как-то так. Это не все применения this но они уже выходят за рамки вопроса и ответа. Также советую почитать где нибудь что такое super.

Fogflasher 03.12.2013 13:08

Правильно ли я понимаю...

Например, есть класс Spaceship, на базе которого создано 5 экземпляров: spaceship1, spaceship2... spaceship5.

И если в коде этого класса компиллятор попадает на строку this.y = 50; то все эти экземпляры будут перемещены на уровень y = 50 пикселов.

Но чтобы какой-то конкретный экземпляр поместить например на уровень y = 30, то из самого класса Spaceship посредством this этого сделать нельзя (?).

Но легко сделать из класса Main, посредством кода: spaceship3.y = 30.

alexandrratush 03.12.2013 13:33

Цитата:

И если в коде этого класса компиллятор попадает на строку this.y = 50; то все эти экземпляры будут перемещены на уровень y = 50 пикселов.
Будет перемещен только экземпляр, который выполнил этот код.

Цитата:

Но чтобы какой-то конкретный экземпляр поместить например на уровень y = 30, то из самого класса Spaceship посредством this этого сделать нельзя (?).
Можно, вот так где угодно напишете, и сработает
Код AS3:

this.y = 30;


Fogflasher 03.12.2013 14:00

Цитата:

Будет перемещен только экземпляр, который выполнил этот код.
Нет, стоп, мы же в класе Spaceship написали this.y = 50, а он тотален для всех своих экземпляров.
Как "экземпляр может выполнить код", если это грубо говоря только ссылка на объект.
Экземпляр может выполнить код разве что так: spaceship3.x = 50; ну об этом я и написал.
Но эта строка будет находится в коде другого класса, отличного от Spaceship.
А чтобы засунуть в класс Spaceship ссылку на spaceship3, то это уже... какие-то рекурсивные извраты, разве нет? : )
Насколько я понимаю, у экземпляра нет своего кода, который бы отличался от кода класса этого экземпляра.

Цитата:

Можно, вот так где угодно напишете, и сработает
Хм, ну так ведь и все остальные экземпляры улетят на y = 30, а мы хотим только spaceship3, например.


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

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