![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#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) |
|
|
![]() |
![]()
Сообщение
#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 |
|
|
![]()
Сообщение
#3
|
|
Участник ![]() ![]() Группа: Пользователь Сообщений: 55 Регистрация: 13.02.2010 Пользователь №: 9767 ![]() |
если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
|
|
|
![]()
Сообщение
#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) -------------------- |
|
|
![]()
Сообщение
#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 } } } |
|
|
![]()
Сообщение
#6
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1181 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
На AS3 (наследование): Неверно. Не соответствует как моему коду на AS1, так и поставленной задаче: "Как это сделать не прописывая для child опять весь список что и в parent?" -------------------- |
|
|
![]()
Сообщение
#7
|
|
Заряд: 100% ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1118 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Верно.
Цитата если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
|
|
|
![]()
Сообщение
#8
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1181 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Верно. Не-а. Допустим у нас есть val1 и val2. Мы задали их для Parent. Теперь в Child нам надо переиначить val2 (а val1 должен остаться ТЕМ ЖЕ ЧТО МЫ УЖЕ задали). Код HaWK-а требует серьезной доработки, чтобы это сделать. -------------------- |
|
|
![]()
Сообщение
#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 { } } } |
|
|
![]()
Сообщение
#10
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 1181 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Об этом было написано? Нефига. Ну даже если так, сделаем "серьёзную" доработку: ... Об этом БЫЛО написано и HaWK даже сам дал цитату, но видимо не смог понять, что хочет автор ))) Доработка требуется именно серьезная. Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child. -------------------- |
|
|
![]()
Сообщение
#11
|
|
Заряд: 100% ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1118 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Цитата Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child. Вы хотите, мы не хотим. P. S. Автор имел в виду, что все переменные объявленные в Parent должны быть и у Child. Ну я могу чего-то не понимать, так что спросим у автора, если я не прав - возьму слова обратно. |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 1.08.2014 - 06:33 |