AS3 emite String como un objeto
Frecuentes
Visto 359 equipos
0
Estoy tratando de convertir la siguiente cadena en un objeto considerando que existe el objeto en la cadena:
var exampleStr:String = "myObject.property1.property2";
var exampleObj:Object = exampleStr as Object;
¿Cómo lograría esto? ¿Hay alguna alternativa a un método que pueda proporcionar?
3 Respuestas
1
Puedes usar una función simple como esta:
function getRValue(target:Object, chain:String):*
{
for each(var i:String in chain.split("."))
{
if(target.hasOwnProperty(i)) target = target[i];
else
{
// Couldn't find property.
throw new Error("Property " + i + " does not exist.");
}
}
return target;
}
Con una prueba:
var myObject:Object = {
property1: {
property2: "Hello world!"
}
};
trace( getRValue(this, "myObject.property1.property2") ); // Hello world!
trace( getRValue(myObject, "property1.property2") ); // Hello world!
Respondido 14 Feb 14, 01:02
Gracias por compartir esto Marti! Esta es una buena manera de lograr esto también. - Kirill
1
¿Supongo que está tratando de crear dinámicamente un objeto a partir de una cadena ensamblada? Si es así, creo que lo que estás buscando es:
var exampleObj:Object = this[ "myObject.property1.property2" ];
Esto supone que miObjetoEl alcance de es "este", y eso propiedad2 es un objeto también.
Respondido 14 Feb 14, 01:02
Buen ejemplo, pero para el objeto creado dinámicamente arrojará un error 1069 para la propiedad que no se encuentra en la clase de trabajo. - Kirill
Bueno, mientras exista property1 y property2, ese código estaría bien. La pregunta del OP es más clara después de sus comentarios. No me di cuenta de que el objetivo era confirmar la existencia de las propiedades. :) - costillas
1
//Convert the string to a property array
var t:Array = exampleStr.split(".");
var exampleObj:Object = null;
if (t.length > 0)
{
var objName:String = t[i];
//get the object in the class
exampleObj = this[objName];
for (var i:int = 1; i < t.length; i++)
{
var propertyName:String = t[i];
if (exampleObj.hasOwnProperty(propertyName))
{
exampleObj = exampleObj[propertyName];
}
else
{
break;
}
}
}
Respondido 14 Feb 14, 03:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas actionscript-3 or haz tu propia pregunta.
¿Quiso decir no incluir el
""
comillas alrededormyObject.property1.property2
? - MartyLas comillas están destinadas a estar allí. Estoy tratando de evaluar si al objeto creado dinámicamente le falta alguna de las propiedades encadenadas. - Kirill
Ahora veo lo que quieres decir: puedes lograrlo usando la recursividad. - Marty