Здравствуйте, гость ( Вход | Регистрация )

> почему при изменении child меняется значение и в parent?
serenya1983
сообщение 14.04.2011 - 17:19
Сообщение #1


Участник
**

Группа: Пользователь
Сообщений: 55
Регистрация: 13.02.2010
Пользователь №: 9767



var parent:Object = {test:10};
var child:Object = parent;
child.test=1;

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

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

PS (использую haxe)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов (1 - 10)
HaWK
сообщение 14.04.2011 - 17:22
Сообщение #2


Заряд: 100%
*****

Группа: Модераторы
Сообщений: 1118
Регистрация: 12.03.2008
Пользователь №: 4145



Потому что 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
сообщение 14.04.2011 - 17:51
Сообщение #3


Участник
**

Группа: Пользователь
Сообщений: 55
Регистрация: 13.02.2010
Пользователь №: 9767



если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 14.04.2011 - 18:36
Сообщение #4


Ветеран конференции
*****

Группа: Пользователь
Сообщений: 1181
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Обычно тут как раз применяется наследование

Код
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
сообщение 14.04.2011 - 19:07
Сообщение #5


Заряд: 100%
*****

Группа: Модераторы
Сообщений: 1118
Регистрация: 12.03.2008
Пользователь №: 4145



На 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
сообщение 14.04.2011 - 19:50
Сообщение #6


Ветеран конференции
*****

Группа: Пользователь
Сообщений: 1181
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(HaWK @ 14.04.2011 - 20:07) *
На AS3 (наследование):


Неверно.
Не соответствует как моему коду на AS1, так и поставленной задаче: "Как это сделать не прописывая для child опять весь список что и в parent?"


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 14.04.2011 - 19:54
Сообщение #7


Заряд: 100%
*****

Группа: Модераторы
Сообщений: 1118
Регистрация: 12.03.2008
Пользователь №: 4145



Верно.
Цитата
если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 14.04.2011 - 19:58
Сообщение #8


Ветеран конференции
*****

Группа: Пользователь
Сообщений: 1181
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(HaWK @ 14.04.2011 - 20:54) *
Верно.


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


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 14.04.2011 - 20:00
Сообщение #9


Заряд: 100%
*****

Группа: Модераторы
Сообщений: 1118
Регистрация: 12.03.2008
Пользователь №: 4145



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

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

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

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


        public function Parent():void {
            
        }
    
     }
    
}
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 14.04.2011 - 20:06
Сообщение #10


Ветеран конференции
*****

Группа: Пользователь
Сообщений: 1181
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



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

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


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


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 14.04.2011 - 20:07
Сообщение #11


Заряд: 100%
*****

Группа: Модераторы
Сообщений: 1118
Регистрация: 12.03.2008
Пользователь №: 4145



Цитата
Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child.

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

P. S.

Автор имел в виду, что все переменные объявленные в Parent должны быть и у Child. Ну я могу чего-то не понимать, так что спросим у автора, если я не прав - возьму слова обратно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 1.08.2014 - 06:33