Просмотр полной версии : Зачем нужна переменная экземпляра
Зачем нужна переменная экземпляра, если ее значение, можно сразу присвоить целевой переменной?
Возможно, пример кодом был бы понятнее.
var petName = name;
name = "Petya"
Это вы где такой ад находите?
1 - var name;
var petName = name;
name = "Petya"
trace(petName , name);
//undefined Petya
2 - это в сях прокатило бы
petName = &name;
name = "Petya"
Я разбираю только основы по Колин Муку не стоит пока придираться к оформлению), просто суть объясните... Если конечно разберете мой ужасный код)
Я Мука не читал, но вряд ли он начал рассказывать про переменные, не коснувшись их типа. А передача по ссылке и по значению это вообще святое.
Добавлено через 14 минут
Строки передаются по значению, хотя здесь это особой роли не играет.
1) name ничего не содержит. - var name;
2) Объявляем petName и пихаем в него, то что содержит name (ничего) - var petName = name;
3) Пихаем строку в name - name = "Petya", petName от этого не изменится.
Добавлено через 32 минуты
Хм, Мук на типы положил до 183 страницы. Теперь понятно, почему так много тем про виртуальный зоопарк.
А почему нельзя сразу пихнуть в "petName" строку "Petya" ? Что меняется, зачем нужна эта переменная name, называемая "именем переменной"
Если вы хотели создать переменную со значением, то так.
var petName:String = "Petya";
А почему нельзя сразу пихнуть в "petName" строку "Petya" ? Что меняется, зачем нужна эта переменная name, называемая "именем переменной"
Да не нужна она нафиг. Можно не париться. Да, можно присвоить ей значение сразу. Я вообще не понимаю зачем Колин начал с такой хрени. Помнится тоже этого не понимал, когда читал эту книжку.
Я Мука не читал, но вряд ли он начал рассказывать про переменные
Тем не менее, это так ) Он действительно начал рассказывать об этом. Причем это не гон переводчика. Так написано и в оригинале.
HardCoder
16.12.2011, 22:39
А вот вопрос по теме. Можно ли сделать переменную ссылкой на другую переменную, но так, чтобы превая всегда имела значение второй (то есть при изменении второй, автоматически изменялось значение первой). Что-то типа [Bindable] в flex, но на чистом АС3. Пока слабо представляю, зачем такое может пригодится, просто так - спортивный интерес.
HardCoder
16.12.2011, 23:01
Можно.Это хорошо.
Это хорошо
До поры, до времени.
HardCoder
16.12.2011, 23:09
Это хорошо
До поры, до времени.А че так?
dimarik, наверное это не так?:private var var2:Number;
trace(var1);
private function get var1():Number{
return var2;
}
@Pronoob (http://www.flasher.ru/forum/member.php?u=131098). Вы это может про статики читаете? В каком контексте это?
А вот вопрос по теме. Можно ли сделать переменную ссылкой на другую переменную, но так, чтобы превая всегда имела значение второй (то есть при изменении второй, автоматически изменялось значение первой). Что-то типа [Bindable] в flex, но на чистом АС3. Пока слабо представляю, зачем такое может пригодится, просто так - спортивный интерес.
Только для сложных типов данных
А че так?
Bindable это медленно (по крайней мере как это реализовано во флексе). Ну и рано или поздно в любом проекте чуть больше HelloWorld, что нибудь заглючит или изменится что-то и отладить его (когда все везде изменяется автоматически) будет трудно, возможно даже придется немало переписать. Любое приложение на флексе с кучей Bindable жутко тормозит, хотя по-большому счету там и тормозить нечему. Возможно я просто не умею его готовить, хз.
HardCoder
16.12.2011, 23:50
Только для сложных типов данныхprivate var mc1:MovieClip = new MovieClip();
private var mc2:MovieClip = new MovieClip();
private var spr:Sprite = new Sprite();
private var var1:MoviClip = mc1;
spr.mask = var1;
//В процессе работы:
var1 = mc2;
//
trace(spr.mask == mc2);//falseКак сделать, чтобы было true, а не false?
Все "переменные" заменяем на акцессоры.
И Flex в Bindable не тормозит. Там особо тормозить нечему. На "чисто пацанском" AS3, уверяю, будет такой же тормоз для такой функциональности.
А я и нигде и не писал, что на чистом AS3 bindable будет быстрее, чем на Flex. Я имел ввиду реализацию в других языках.
будет такой же тормоз для такой функциональности.
Именно.
HardCoder
17.12.2011, 00:33
private var mc1:MovieClip = new MovieClip();
private var mc2:MovieClip = new MovieClip();
private var spr:Sprite = new Sprite();
private var _var1:MovieClip = mc1;
spr.mask = var1;//Маскирует обьектом mc1
var1 = mc2;//Не маскирует обьектом mc2
private function set var1(mc:MovieClip):void{
_var1 = mc;
}
private function get var1():MovieClip {
return _var1;
}Выходит, мне надо в сеттере var1 дописать строчкуspr.mask = mc;Думал, по-проще будет...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.