Foros del Web » Creando para Internet » Flash y Actionscript »

Duda con el uso AS2

Estas en el tema de Duda con el uso AS2 en el foro de Flash y Actionscript en Foros del Web. Hola: poquito a poco me estoy metiendo con las clases de Flash y queriendo hacer pruebas me topo con este problema: Clase AS: Código: class ...
  #1 (permalink)  
Antiguo 31/03/2006, 22:47
 
Fecha de Ingreso: marzo-2006
Mensajes: 25
Antigüedad: 11 años, 9 meses
Puntos: 0
Duda con el uso AS2

Hola:

poquito a poco me estoy metiendo con las clases de Flash y queriendo hacer pruebas me topo con este problema:

Clase AS:

Código:
class operacion {
	var num1:Number, num2:Number;
	function operacion(num1:Number, num2:Number, ope:String) {
		this.num1 = num1;
		this.num2 = num2;
		this[ope](num1, num2);
	}
	private function suma(num1, num2):String {
		return (num1+num2).toString();
	}
	private function resta(num1, num2):String {
		return (num1-num2).toString();
	}
	private function multi(num1, num2):String {
		return (num1*num2).toString();
	}
	private function div(num1, num2):String {
		if (!num2 == 0) {
			return (num1/num2).toString();
		} else {
			return "División imposible.";
		}
	}
}
Código en Flash:

Código:
import operacion;
salida = (new operacion(1, 1, suma)).toString();
El resultado:

Código:
[object Object]
Que se supone que hago mal?

Me lo pueden explicar por favor.

Gracias.
  #2 (permalink)  
Antiguo 01/04/2006, 13:03
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Buenas.

No sé exactamente dónde está el problema, pero me parece que puede deberse a que creas una nueva instancia, la asignás a una variable y después hacés un trace de esa variable, que es una referencia al objeto (y por eso daría [object Object]. Pero no estoy seguro.

Fijate también que estás usando sólo el constructor, el resto de los métodos son privados. Cambiando private por public, funciona. Si usás el constructor para cada operación, estarías creando muchos objetos, lo cual consume recursos innecesariamente. Podrías crear un sólo objeto y tener algunos métodos públicos (eventualmente otros privados) que hagan las operaciones y devuelvan valores. Por ej, algo así:

Código:
var objOperacion:operacion = new operacion();
objOperacion.suma(1,5);
objOperacion.resta(7,2);
Otra cosa interesante sería crear métodos estáticos. De esta forma, no creás una instancia de la clase/objeto cada vez que quieras hacer una operación. Simplemente, lo llamás por el nombre de la clase más el nombre del método.

Por ejemplo:

Código:
class operacion {
	function operacion() {
	}
	static public function suma(num1, num2):String {
		return (num1+num2).toString();
	}
	static public function resta(num1, num2):String {
		return (num1-num2).toString();
	}
	static public function multi(num1, num2):String {
		return (num1*num2).toString();
	}
	static public function div(num1, num2):String {
		if (!num2 == 0) {
			return (num1/num2).toString();
		} else {
			return "División imposible.";
		}
	}
}
Y en el script:

Código:
import operacion;
trace(operacion.suma(1,4));
trace(operacion.resta(1,4));
trace(operacion.multi(1,4));
trace(operacion.div(1,4));
Para este caso yo usaría esta útlima opción.

Suerte
Califa
  #3 (permalink)  
Antiguo 01/04/2006, 14:16
 
Fecha de Ingreso: marzo-2006
Mensajes: 25
Antigüedad: 11 años, 9 meses
Puntos: 0
Pues realizando los cambios sale perfecto.

Muchas gracias Califa.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:16.