DescrybeType может помочь здесь.Я основываю этот ответ на другом ответе (возможно, вы захотите проверить его): Самый быстрый способ получить значения объектов в as3
По сути, функция descriptionType позволит вам проверить публичный интерфейс вашего объекта.Это означает общедоступные переменные, методы получения / установки и методы (плюс некоторая другая информация, не относящаяся к вашей проблеме).Таким образом, вы получаете список всех получателей и, таким образом, возвращаете имена указанных свойств плюс их фактические значения для данного объекта.Не то чтобы это не совсем то же самое, что ваш пример кода, так как он не будет использовать закрытые переменные, а скорее вызовет получатели.
В коде это может быть что-то вроде этого (основано на коде всвязанный вопрос).
package {
import flash.net.URLVariables;
import flash.utils.describeType;
import flash.utils.getQualifiedClassName;
public class PropertiesHelper {
public function PropertiesHelper() {
}
private static var typePropertiesCache:Object = {};
public static function getPropertyNames(instance:Object):Array {
var className:String = getQualifiedClassName(instance);
if(typePropertiesCache[className]) {
return typePropertiesCache[className];
}
var typeDef:XML = describeType(instance);
trace(typeDef);
var props:Array = [];
for each(var prop:XML in typeDef.accessor.(@access == "readwrite" || @access == "readonly")) {
props.push(prop.@name);
}
return typePropertiesCache[className] = props;
}
public static function getNameValuePairs(instance:Object):URLVariables {
var props:Array = getPropertyNames(instance);
var vars:URLVariables = new URLVariables();
for each(var prop:String in props) {
vars[prop] = instance[prop];
}
return vars;
}
}
}
Использование:
var blog:Blog = new Blog(1,"title&","text","cat","created");
var urlVars:URLVariables = PropertiesHelper.getNameValuePairs(blog);
trace(urlVars);
Я использую объект URLVariables
, поскольку кажется, что это то, что вы хотите (хотя на самом деле это не то, что делает метод blogURLVars
), ноВы можете изменить это в методе getNameValuePairs
, чтобы удовлетворить ваши потребности, если это необходимо.Преимущество использования объекта URLVariables
заключается в том, что он автоматически обрабатывает URL-кодировку, поэтому зарезервированные символы, такие как &
, =
и т. Д., Не должны вызывать проблем.