Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.11.2010, 15:42
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 1  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
По умолчанию Переменная экземпляра

При чтении книги К.Мука возник вопрос.
На стр.56 приведен такой код:

Код AS3:
package zoo
{
	public class VirtualZoo
	{
		public function VirtualZoo()
		{
			var pet = new VirtualPet;
                        pet.petName = "Stan"; 
		}
	}
}
А вот сообственно класс VirtualPet

Код AS3:
package zoo
{
	internal class VirtualPet
	{
		 var petName = "Unnamed Pet";
 
	}
}
Я так понял, что при создании очередного объекта переменной экземпляра petName присваивается Stan, т.е. все животные будут иметь имена Stan.

А в чем же собственно отличие предыдущего кода от кода описанного ниже ?

Код AS3:
package zoo
{
	public class VirtualZoo
	{
		public function VirtualZoo()
		{
			var pet = new VirtualPet("Stan");
		}
	}
}
Класс VirtualPet

Код AS3:
package zoo
{
	internal class VirtualPet
	{
		internal var petName;
 
		public function VirtualPet(name)
		{
			this.petName = name;
		}
	}
}
Но ведь получается тоже самое, что и код описанный выше. Т.е. создается объект в конструкторе класса VirtualZoo аргумент объекта передается в качестве знач-я параметру метода-конструктора VirtualPet, а параметр конструктора присваивается переменной экземпляра. Из этого следует, что все объекты будут иметь имена Stan.

Старый 27.11.2010, 16:04
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
разницы в 2х вариантах нет. А имя "Stan" будет иметь только экземпляр, присвоенный переменной var pet, а не все объекты.

Старый 27.11.2010, 16:22
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 3  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
i.o. но ведь переменная pet описана в методе-конструкторе VirtualZoo. Получается, что объект будет вновь создаваться.

Старый 27.11.2010, 16:47
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
какой объект? Их тут два. Про который речь?

Старый 27.11.2010, 17:04
Bred45 вне форума Посмотреть профиль Отправить личное сообщение для Bred45 Найти все сообщения от Bred45
  № 5  
Ответить с цитированием
Bred45

Регистрация: Dec 2008
Сообщений: 87
goldlider, а что Вас смущает? Мук рассказывает про переменную экземпляра. На примере переменной petName.
Код AS3:
package zoo{
	public class VirtualZoo {
		public function VirtualZoo() {
			var pet1=new VirtualPet("Stan");
			var pet2=new VirtualPet("Vlad");
			var pet3=new VirtualPet("Lena");
		}
	}
}
Вот создается три объекта VirtualPet, каждый из которых будет иметь собственное значение переменной экземпляра petName

Старый 27.11.2010, 17:23
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 6  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
i.o. я предельно четко объяснил про какой объект идет речь. Я имел ввиду объект описанный в конструкторе VirtualZoo. Почему у нас два объекта создание объекта идет только в методе-конструкторе VirtualZoo и нигде более.

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

В конструкторе VirtualZoo пишем эту строчку:

Код AS3:
var pet = new VirtualPet("Stan", "Vlad", "Lena");
 
А в конструкторе VirtualPetЖ:
 
public function VirtualPet(name1, name2, name3)
{
     this.petName = name1;
     this.petName = name2;
     this.petName = name3;
}


Последний раз редактировалось iNils; 27.11.2010 в 17:53.
Старый 27.11.2010, 17:30
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 7  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
советую читать в Муке не только код, но и текст помимо кода. вам на этом примере просто дают такое понятие как класс, как его создать и как с ним работать.
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 27.11.2010, 17:51
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 8  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
cleptoman, а с чего вы решили, что я читаю только слова. Я знаю как создавать классы. Проблема была связана с переменной экземпляра. Не понятна была разница между двумя примерами.

Старый 27.11.2010, 18:59
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Два, потому что VirtualZoo создает в своем конструкторе VirtualPet. Так что не понятно про какой из этих 2ух объектов вы говорите, уточняйте. Несмотря на то что пример состоит из двух простейших классов, очень сложно понять, что вы вообще пытаетесь спросить. Я вам ответил в посту номер2 на ваш вопрос, но у вас до сих пор какие-то вопросы. Поэтому будьте любезны задавать их максимально понятно, если хотите услышать ответ как можно быстрее.

----

Код AS3:
public function VirtualPet(name1, name2, name3)
{
     this.petName = name1;
     this.petName = name2;
     this.petName = name3;
}
Интересно, что было задумано в этом месте?
Вы ведь догадываетесь, что this.petName будет всегда равен name3 ?

Старый 27.11.2010, 21:08
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 10  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
i.o. так значит если бы объект var pet = new VirtualPet создавался в конструкторе VirtualPet, то у нас был бы только один объект ?

Код AS3:
public function VirtualPet(name1, name2, name3)
{
     this.petName = name1;
     this.petName = name2;
     this.petName = name3;
}
Этим я хотел показать, что у нас в конструкторе VirtualZoo создаются три объекта
var pet = new VirtualPet("Stan", "Vlad", "Lena");. И эти имена передаются, как значение для параметров конструктора VirtualPet, name1 = Stan, name2 = Vlad, name3 = Lena. Три объекта - три имени.

This указывает на то, что текущему объекту присваивается имя.


Последний раз редактировалось goldlider; 27.11.2010 в 21:10.
Создать новую тему Ответ Часовой пояс GMT +4, время: 00:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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