var parent:Object = {test:10}; var child:Object = parent; child.test=1;
trace(parent.test+" "+child.test); результат: 1 1
почему при изменении child меняется значение и в parent???
PS (использую haxe)
HaWK
14.04.2011 - 17:22
Потому что 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
если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
chingachgoog
14.04.2011 - 18:36
Обычно тут как раз применяется наследование
Код
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
На 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
Цитата(HaWK @ 14.04.2011 - 20:07)
На AS3 (наследование):
Неверно. Не соответствует как моему коду на AS1, так и поставленной задаче: "Как это сделать не прописывая для child опять весь список что и в parent?"
HaWK
14.04.2011 - 19:54
Верно.
Цитата
если parent содержит десятки переменных, а child должен содержать все те же переменные, только несколько из них будут иметь другие значения. Как это сделать не прописывая для child опять весь список что и в parent?
chingachgoog
14.04.2011 - 19:58
Цитата(HaWK @ 14.04.2011 - 20:54)
Верно.
Не-а. Допустим у нас есть val1 и val2. Мы задали их для Parent. Теперь в Child нам надо переиначить val2 (а val1 должен остаться ТЕМ ЖЕ ЧТО МЫ УЖЕ задали). Код HaWK-а требует серьезной доработки, чтобы это сделать.
HaWK
14.04.2011 - 20:00
Цитата
Допустим у нас есть 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
Цитата(HaWK @ 14.04.2011 - 21:00)
Об этом было написано? Нефига.
Ну даже если так, сделаем "серьёзную" доработку: ...
Об этом БЫЛО написано и HaWK даже сам дал цитату, но видимо не смог понять, что хочет автор ))) Доработка требуется именно серьезная. Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child.
HaWK
14.04.2011 - 20:07
Цитата
Что если мы хотим задать значение для переменных в Parent ДИНАМИЧЕСКИ? Ведь они должны так же динамически отнаследоваься в Child.
Вы хотите, мы не хотим.
P. S.
Автор имел в виду, что все переменные объявленные в Parent должны быть и у Child. Ну я могу чего-то не понимать, так что спросим у автора, если я не прав - возьму слова обратно.