ActionScript3: ¿Existe variable?
-
18-09-2019 - |
Pregunta
Soy un poco nuevo en ActionScript, pero no puedo imaginar éste. He hecho un montón de búsqueda sobre este tema y no he encontrado una respuesta clara. He probado las siguientes soluciones que las personas publican en línea, pero ninguno de ellos funciona.
Todo lo siguiente soluciones dar el error: 1120: Acceso de propiedad no definida myVariable
Sugerencia # 1:
try {
trace(myVariable); }
catch {
trace("your variable doesn't exist"); }
Sugerencia # 2:
if (myVariable) {
trace("your variable exists!!"); }
else {
trace("it doesn't exist"); }
Sugerencia # 3:
if ( myVariable == null )
trace("your variable doesn't exist");
Sugerencia # 4:
if ( myVariable == undefined )
trace("your variable doesn't exist");
Como dije, he encontrado muchos puestos foros y cosas en línea que dan las sugerencias anteriores diciendo que van a trabajar, pero todos me parecen estar dando ese mismo 1120: Acceso de propiedad no definida myVariable error.
Por cierto, en caso de que se preguntan por qué yo tendría que comprobar si existe una variable o no, tengo la intención de pasar variables al SWF en su URL, por lo que necesita para asegurarse de que existen las variables adecuadas y manejar el código correctamente si no se adoptan en.
Gracias por la rápida respuesta. Aún así no es realmente trabaja. El alcance de la variable es sólo en el nivel superior / raíz del guión. Básicamente, comienzo a un nuevo archivo flash, en el primer cuadro añado la siguiente acción:
// to check for this.myVariable
if ( this.hasOwnProperty( "myVariable" ) ) {
trace("myVariable exists");
}
else
{
//Variable doesn't exist, so declare it now
trace("declaring variable now...");
var myVariable = "Default Value";
}
trace(myVariable);
Al ejecutar el archivo flash, obtengo esta salida:
myVariable exists
undefined
Me esperaba esto:
declaring variable now...
Default Value
Solución
Por cierto, en caso de que se está preguntando por lo que tendría que comprobar si una existe la variable o no, tengo la intención al pasar variables al SWF en su URL, por lo que necesito para asegurarse el correcto existen las variables y usa el código de adecuadamente si no se pasan en.
A continuación, usted está tomando un enfoque equivocado. Aquí está la manera correcta ™ para leer y validar los parámetros SWF, junto con el valor por defecto si no existen:
private function parameter(name:String, defaultValue:String):String
{
// Get parameter list
var paramObj:Object = LoaderInfo(stage.loaderInfo).parameters;
// Check if parameter exists
if(paramObj.hasOwnProperty(name) && paramObj[name] != "")
return paramObj[name];
else
return defaultValue;
}
¡Atención! Dado que este transmite en la propiedad 'escenario', o bien utilizar el código de la clase de documento o después de Event.ADDED_TO_STAGE
.
Otros consejos
La respuesta de LiraNuna es definitivamente el camino derecho para acceder a los parámetros de la cargadora. Sin embargo, para responder a la pregunta de cómo comprobar la existencia de variables (para la posteridad), esto se hace con el hasOwnProperty () método , que existe en todos los objetos:
// to check for this.myVariable
if ( this.hasOwnProperty( "myVariable" ) ) {
trace("myVariable exists");
} else {
//Variable doesn't exist, so declare it now
trace("declaring variable now...");
this.myVariable = "Default Value";
}
trace( this.myVariable );
Esto debería cubrir su situación. Pero no sé de ninguna manera de comprobar la existencia de una variable de la forma en que está tratando de hacer, simplemente haciendo una referencia directa a la variable. Creo que debe referirse a ella a través de su ámbito de aplicación.
fenomas es probablemente más a la derecha. (Probablemente debería modificar algunos de mi código para utilizar ese método). Pero el método que utilizo actualmente para las clases es:
try {
if(this["myFunction") {
this["myFunction"]();
}
catch(e:Error) {}
que no es el más elegante, ya que no generan excepciones.
Mi razón para usar este tipo de código es que estamos haciendo un poco de codificación dinámica y abusar "incluye" en flexión a escribir código repetitivo.
trace (myVariable);
Cuando etapa no está disponible, es posible que intenta extraer parámetros de root.loaderInfo.parameters. Tener cuidado para comprobar si cada propiedad de la cadena es nula.
if( root != null && root.loaderInfo != null && root.loaderInfo.parameters != null ) {
myVar = root.loaderInfo.parameters.myVar;
}
if (myVariable === "undefined") {
trace("variable doesn't exist");
else
trace("variable exists");
Tenga en cuenta que el operador de triple comparación. Es un pequeño truco que aprendí de mis días de Javascript. También trabaja en AS3 y es útil para comprobar si existe elemento de la matriz incluso si nula. De esta manera:
var array:Array = ["zero", 1, null];
if (array[2]) //returns false
if (array[2] !== "undefined") //returns true
He tenido el mismo problema hace poco, y miré hacia arriba maneras de solucionar esto. Sin embargo, he encontrado que cuando se registra la variable así ...
var i:int;
... que no se restablece la variable si ya se ha hecho. Por ejemplo, si este es mi código en el fotograma 1:
var i:int;
if (i > 0){
i++;
} else {
i = 1;
}
A continuación, estos serán los valores de "i" cada vez que el flash se remonta en el mismo período:
// First Iteration
trace(i); // 1
// Second Iteration
trace(i); // 2
// Third
trace(i); // 3, etc...
Se trabajó en mi propio proyecto, y es mucho menos código que la respuesta anterior. Espero que funcione para usted, también.