Здравствуйте!
Есть некоторый динамический класс, унаследованный от Proxy, который используется в качестве саморасширяемого хранилища данных.
Код AS3:
package com.elandor.fgrabber
{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
use namespace flash_proxy;
public dynamic class DynamicObject extends Proxy
{
protected var children:Array;
public function DynamicObject()
{
super();
children = new Array();
}
override flash_proxy function getProperty(name:*):* {
if (!children.hasOwnProperty(name)){
children[name] = new DynamicObject();
}
return children[name];
}
override flash_proxy function setProperty(name:*, value:*):void {
if(!(value is Function))this.children[name] = value;
}
override flash_proxy function deleteProperty(name:*):Boolean{
return (delete children[name])
}
override flash_proxy function hasProperty(name:*):Boolean{return children.hasOwnProperty(name)}
}
}
Возникла необходимость сохранить структуру (вместе с содержимым) этого динамического объекта. Собственно один из вариантов - при сохранении возвращать привычный Object или XML-дерево, с которыми потом уже можно удобно работать.
Собственно вопрос возникает касательно этого метода:
Код AS3:
override flash_proxy function getProperty(name:*):* {
if (!children.hasOwnProperty(name)){
children[name] = new DynamicObject();
}
return children[name];
}
..а именно насчёт входного параметра name. Пробовал работать с ним как со String (например тот же trace(name) ) - возвращает пустую строку, хотя метод hasOwnProperty с name в качестве строки работает "на Ура".
Что я делаю не так? Как можно получить имя, к которому пытаются обратиться в этом классе?
Updated:
В ветку if (!children.hasOwnProperty(name)) не заходит, значит и hasOwnProperty с name работает не так, как предполагалось.
Главное объект отлично работает и превосходно справляется со своими обязанностями. Не могу понять, что делать с этим параметром.