Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: почему при изменении child меняется значение и в parent?
Flash Zone Forum > Macromedia Flash > Начинающим
serenya1983
var parent:Object = {test:10};
var child:Object = parent;
child.test=1;

trace(parent.test+" "+child.test);
результат: 1 1

почему при изменении child меняется значение и в parent???

PS (использую haxe)
HaWK
Потому что child у вас это ссылка на parent. По сути вы выводите два раза parent, а child вообще нет.
Посмотрите на эту строчку:
Код
var child:Object = parent;

Что вы сделали?

Надо тогда уж:
Код
var parent:Object = {test:10};
var child:Object = {test:0};
child.test = 1;
trace(parent.test + " " + child.test); //10 1
serenya1983
 если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
chingachgoog
Обычно тут как раз применяется наследование

Код
function Parent(){}
Parent.prototype.val="Значение родителя"

function Child(){}
Child.prototype.__proto__=Parent.prototype

a=new Child
b=new Child

b.val="Значение данного ребенка"

trace("a.val="+a.val+"\rb.val="+b.val)


(пример на AS1)
HaWK
На AS3 (наследование):

Код
package {

     public class Parent {
    
        public var val:int;

        public function Parent():void {
            
        }
    
     }
    
}


Код
package {

     import Parent;

     public class Child extends Parent {

        public function Child():void {
            super();
        }
    
     }
    
}


Код
package {

     import Parent;
     import Child;

     public class Main {
    
        private var par:Parent = new Parent();
        private var cld:Child = new Child();

        public function Main():void {
            par.val = 1;
            cld.val = 2;
            trace(par.val, cld.val); //1 2
        }
    
     }
    
}
chingachgoog
Цитата(HaWK @ 14.04.2011 - 20:07) *
На AS3 (наследование):


Неверно.
Не соответствует как моему коду на AS1, так и поставленной задаче: "Как это сделать не прописывая для child опять весь список что и в parent?"
HaWK
Верно.
Цитата
если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
chingachgoog
Цитата(HaWK @ 14.04.2011 - 20:54) *
Верно.


Не-а.
Допустим у нас есть val1 и val2. Мы задали их для Parent. Теперь в Child нам надо переиначить val2 (а val1 должен остаться ТЕМ ЖЕ ЧТО МЫ УЖЕ задали). Код HaWK-а требует серьезной доработки, чтобы это сделать.
HaWK
Цитата
Допустим у нас есть val1 и val2. Мы задали их для Parent. Теперь в Child нам надо переиначить val2 (а val1 должен остаться ТЕМ ЖЕ ЧТО МЫ УЖЕ задали).

Об этом было написано? Нефига.

Ну даже если так, сделаем "серьёзную" доработку:
Код
package {

     public class Parent {
    
        public var val1:int = 1;
        public var val2:int;


        public function Parent():void {
            
        }
    
     }
    
}
chingachgoog
Цитата(HaWK @ 14.04.2011 - 21:00) *
Об этом было написано? Нефига.

Ну даже если так, сделаем "серьёзную" доработку:
...


Об этом БЫЛО написано и HaWK даже сам дал цитату, но видимо не смог понять, что хочет автор )))
Доработка требуется именно серьезная. Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child.
HaWK
Цитата
Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child.

Вы хотите, мы не хотим.

P. S.

Автор имел в виду, что все переменные объявленные в Parent должны быть и у Child. Ну я могу чего-то не понимать, так что спросим у автора, если я не прав - возьму слова обратно.
Русская версия IP.Board © 2001-2017 IPS, Inc.