actionscript-3 scope actionscript closures flash-player-11

actionscript 3 - Hacer referencia al propio constructor en la función interna



actionscript-3 scope (2)

No debe llamar a su variable " objeto ". ¿Por qué anidabas tu función interna? ¿Por qué no solo?

public static function makeObjectAsync(callback:Function):void { callback(new MyClass()); }

O si realmente quieres esa función anidada:

public static function makeObjectAsync(callback:Function):void { inner(); function inner():void { callback(new MyClass()); } }

Y no puede recordar el constructor de la clase nuevamente, usar una función que se llama en el constructor y luego volver a llamarla. Con esto, no hace referencia al constructor, sino que crea una nueva instancia de la clase.

Aquí hay un ejemplo de juguete destilado de una clase compleja:

public class MyClass { public function MyClass() { trace(''Created''); } public static function makeObjectAsync(callback:Function):void { inner(); function inner():void { var object:MyClass = new MyClass(); // line 10 callback(object); } } }

Después de llamar a la función estática:

MyClass.makeObjectAsync(function(object:Myclass):void { ... })

la siguiente excepción de tiempo de ejecución se produce en la línea 10:

TypeError: Error #1007: Instantiation attempted on a non-constructor.

¿Por qué es esto y qué puedo hacer al respecto?

Editar

Parece que funciona el new (MyClass)() . Ahora estoy posiblemente más confundido.


No muy claro en el POR QUÉ ser honrado. Tiene que ver con el alcance heredado por funciones anónimas, dependiendo de cómo se declaran.

Sin embargo, tengo 2 soluciones para ti.

  1. Si su método makeObject no fuera estático, funcionaría.

  2. Declara tu función anónima de la otra manera:

    public static function makeObjectAsync(callback:Function):void { var inner : Function = function():void { var object:MyClass = new MyClass(); callback(object); }; inner(); }