PDA

Просмотр полной версии : Помогите с ООП во Флэш


руль
30.07.2002, 00:55
у меня есть кусок кода:

z = new Object();
z.addProperty(p);
z_1 = new Object(z);
z_1.p = 100;
z_2 = new Object(z);
z_2.p = 200;
trace(z_1.p);

т.е.
создаю обьект z у него есть свойсво p.Далее от Z создаю 2 дочерних обьекта с такими-же свойствами.
по идеи в окошке должно выскочить 100 т.к. у обьекта z_1 есть свойсво p и оно припавнивается именно 100 однако выскакивает почему-то 200.
Help

Nox Noctis
30.07.2002, 04:08
1.
сделай trace(z.addProperty(p)); и убедись что свойство объекта z не создается. (в аутпуте получаем false)
— читай в хэлпе синтаксис и способ использования метода addProperty :)
ты уверен что тебе вообще нужно геттер-сеттер свойство ?

2.
запусти одельный мувик в котором будет только этот код и ничего больше, нажми ctrl+alt+V и понаблюдай следующее:
Variable _level0.z = [object #1, class 'Object'] {
p:200
}
Variable _level0.z_1 = [object #1, class 'Object']
Variable _level0.z_2 = [object #1, class 'Object'] видишь ? получается не три объекта а три ссылки на один и тот же object #1
— читай в хэлпе что должно быть параметром конструктора new Object

3.
ты видимо собирался создать класс... есть такое подозрение :)
тогда для начала тебе нужен конструктор

// конструктор класса
z_class = function (num) {
// здесь описываешь свойства и методы
if (num) {
/* если передан параметр, то создаем приватное свойство
(если нет - то при обращении получим наследованное от прототипа)*/
this.addProperty("p", this.getP, this.setP);
this.p = num;
}
};
// предположим, что геттер-сеттер тебе правда нужен
/*функция получения p*/
z_class.prototype.getP = function() {
return this.p;
};
/*функция изменения p*/
z_class.prototype.setP = function() {
this.p = arguments[0];
};
/*можно еще добавить дефолтовое значение p*/
z_class.prototype.p = 666;
//
z_1 = new z_class(100);
z_2 = new z_class(200);
z_3 = new z_class();
trace(z_1.p);
trace(z_2.p);
trace(z_3.p);
удачи :) но пасаран :)

*какой я добрый к трем часам ночи... ужас :)*

руль
30.07.2002, 04:33
2 Nox Noctis биг респект.
Будем пробывать. :)
зы: кстати ты угадал мне нужен именно класс. Правда с геттером и путерром промахнулся =)
зыы: Есть еще метод RegisterClass(); для чего он?. Насколько я понял он привязывает класс к муву но когда возникает такая необходимость - ума не преложу
зыыы: Доступны ли для записи свойсва созданного класса прямиком из рута? _root.MyClass.MyProperty=10;