Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Уточнения: про this и отличия protected, private (http://www.flasher.ru/forum/showthread.php?t=130280)

dimarik 23.09.2009 12:15

this соотносится только с экземплярами, никак не с классами. this указывает на текущий экземпляр, в котором был упомянут.

Psycho Tiger 23.09.2009 12:23

Цитата:

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

var c:SomeClass=new SomeClass();
var a:SomeClass=c.returnMe();
 
class SomeClass{
...
function returnMe():SomeClass{
return this;
}
...
}

a и c теперь указывают на один объект.

TommyLee 23.09.2009 12:56

Цитата:

Сообщение от dimarik (Сообщение 852836)
this соотносится только с экземплярами, никак не с классами. this указывает на текущий экземпляр, в котором был упомянут.

да, некорректно написал.

Цитата:

Сообщение от Psycho Tiger (Сообщение 852838)
Код AS3:

...
function returnMe():SomeClass{
 return this;
}


с таким синтаксисом еще не знаком, поэтому только такая мысль: метод с помощью this возвращает всю структуру своего экземпляра. Верно?

dimarik 23.09.2009 12:58

Возвращает ссылку на этот экземпляр. Упоминание структуры объекта в данном контексте лишено смысла.

TommyLee 23.09.2009 13:15

Цитата:

Сообщение от dimarik (Сообщение 852845)
Возвращает ссылку на этот экземпляр. Упоминание структуры объекта в данном контексте лишено смысла.

Имел ввиду копирование значений своих внутренних переменных во внутренние переменные того экземпляра, который вызовет этот метод. Привычка из с++. Получается, данные не копируются?

Psycho Tiger 23.09.2009 13:20

Нене, копия не создается. Создается только ещё одна ссылка на экземпляр.
То есть в моём примере
Код AS3:

var c:SomeClass=new SomeClass();
var a:SomeClass=c.returnMe();
 
class SomeClass{
...
public var myValue:int=0;
//это просто метод, возвращающий this, а так как this - ссылка на себя, то и тип будет типом этого класса - т.е. SomeClass
public function returnMe():SomeClass{
return this;
}
...
}
...
trace(c.myValue); //0
trace(a.myValue); //0
c.myValue=5;
trace(c.myValue); //5
trace(a.myValue); //5


iNils 23.09.2009 13:31

Короче, this это Я.

TommyLee 23.09.2009 13:38

Так. У нас есть экземпляры одного класса: а, с.
Код AS3:

var c:SomeClass=new SomeClass();
var a:SomeClass=c.returnMe();

после этого что произошло? а стал "псевдонимом" с - как, например, указатель на объект в с++, 2 имени одного и того же?

ToRR 23.09.2009 14:11

a и c после этого указывают на 1 и тот же объект

BlooDHounD 23.09.2009 14:37

TommyLee, у Вас в c++ не было ссылок? или они имели особое значение для Вас?
Цитата:

Сообщение от Psycho Tiger
В статичных методах нельзя использовать this, т.к. нет никаких экземпляров.

экземпляры есть. нельзя использовать, так как это синтаксический запрет.

Добавлено через 30 минут
так как меня обещали в очередной раз покарать модераторы, за неполноценность предоставленной информации, то вынужден расписать "корень зла" для народа.

в объектных языках, всё - это объекты. а объект - это всегда экземпляр класса. и, входя в рекурсию, класс - это объект ( так как он входит в множество "всё" ).


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

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