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

TommyLee 22.09.2009 16:30

Уточнения: про this и отличия protected, private
 
1. this. используется только для членов классов: переменных и ссылок на объект? Я так понял, что переменная не может быть "сама по себе", даже если она используется в методе того класса, в котором объявлена. в отличие от с++.

2.
Перевод Мука:
"Метод экземпляра, объявленный с использованием модификатора protected ... доступен только для кода класса, содержащего описание этого метода, или для кода потомков этого класса..."
и
"Метод экземпляра, объявленный с использованием модификатора private ... доступен только для кода класса, содержащего описание этого метода."
Разница только в том, что private нельзя вызвать из потомков? Не считая запрет доступа из того же самого или других пакетов.

alexcon314 22.09.2009 16:59

1."Сама по себе":
trace(this);
var a = this;
MyFunction(this);
Вы это имели в виду?
2. AS3 хэлп:
Цитата:

Идентификаторы управления доступом и наследование
Если свойство объявлено с использованием ключевого слова public, оно будет доступно для всего кода. Это означает, что ключевое слово public, в отличие от слов private, protected и internal, не накладывает ограничений на наследование свойств.

Если свойство объявлено с использованием ключевого слова private, оно доступно только в определяющем его классе, то есть не наследуется никакими подклассами. Такое поведение отличается от предыдущих версий ActionScript, где поведение ключевого слова private больше напоминало поведение protected в ActionScript 3.0.

Ключевое слово protected указывает, что свойство доступно не только для определяющего его класса, но и для всех подклассов. В отличие от ключевого слова protected в языке программирования Java, в ActionScript 3.0 protected не делает свойство доступным для всех других классов в одном пакете. В ActionScript 3.0 свойство, объявленное с использованием ключевого слова protected доступно только для подклассов. Более того, защищенное свойство доступно для подкласса независимо от того, находится он в том же пакете, что и базовый класс, или в другом.

Чтобы ограничить доступность свойства только тем пакетом, в котором оно определено, следует использовать только ключевое слово internal без других идентификаторов управления доступом. Идентификатор управления доступом internal используется по умолчанию, когда нет других атрибутов. Свойство, объявленное с идентификатором internal, наследуется только подклассами, включенными в тот же пакет.

TommyLee 22.09.2009 17:13

по 1.
Код AS3:

class VirtualPet{
              var petName;
              var curr=1000;
              var human;
              public function VirtualPet(name,curr_plus){
                  this.petName=name;
                  this.curr+=curr_plus;
                  this.human=new Human();
              }
}
}

об этом. что члены класса нельзя использовать "сами по себе", только через this. В с++ можно без this - просто взять и написать.

по 2. спасибо.

alexcon314 22.09.2009 17:22

Аа.. почему же только через this? Можно и с this и без него.
Код AS3:

class VirtualPet{
              var petName;
              var curr=1000;
              var human;
              public function VirtualPet(name,curr_plus){
                  petName=name;
                  this.curr+=curr_plus;
                  human=new Human();
              }
}


etc 22.09.2009 17:34

Лучше с ним)

ToRR 22.09.2009 17:36

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

TommyLee 22.09.2009 17:47

Цитата:

Сообщение от ToRR (Сообщение 852667)
this - указатель на объект, в контексте которого сейчас выполняется код.
он может быть и "сам по себе" - this можно передать как аргумент при вызове функции и тд и тп.

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

random13 22.09.2009 18:20

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

Psycho Tiger 22.09.2009 18:28

Цитата:

Сообщение от etc (Сообщение 852665)
Лучше с ним)

Не хочу разводить холивар, но почему все таки лучше с ним?
Разницу вижу только в
Код AS3:

var arg1:*,arg2:*;
function func(arg1:*, arg2:*):void{
this.arg1=arg1;
this.arg2=arg2;
}

Для меня код с this читается как то сложнее, да и писать его постоянно не очень хочется. Хотя, может это лишь дело привычки.

random13 22.09.2009 18:35

Цитата:

Сообщение от Psycho Tiger (Сообщение 852680)
Не хочу разводить холивар, но почему все таки лучше с ним?
Разницу вижу только в
Код AS3:

var arg1:*,arg2:*;
function func(arg1:*, arg2:*):void{
this.arg1=arg1;
this.arg2=arg2;
}

Для меня код с this читается как то сложнее, да и писать его постоянно не очень хочется. Хотя, может это лишь дело привычки.

дело привычки, я тоже раньше не понимал, а теперь читается действительно лучше, а холивар уже был, в другой теме, пару месяцев назад


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

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