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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top