es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo traducir la palabra clave “prototype” en AS3 a Haxe?

Tengo el siguiente código AS3 y quiero traducirlo a Haxe. Pero no sé cómo lidiar con la palabra clave prototype. ¿Quién puede ayudarme? Gracias.

   var style = new CSSStyleDeclaration(); 
    style.defaultFactory = function():void
    {
       this.disabledOverlayAlpha = 0;
       this.borderStyle = "controlBar";
       this.paddingTop = 10;
       this.verticalAlign = "middle";
       this.paddingLeft = 10;
       this.paddingBottom = 10;
       this.paddingRight = 10;
    };
    if(chain == null) chain = {};
    style.defaultFactory.prototype = chain;
    chain = new style.defaultFactory();

    style.defaultFactory = function():void
    {
       this.fontWeight = "bold";
    };

    style.defaultFactory.prototype = chain;
    chain = new style.defaultFactory();

    style.defaultFactory = function():void
    {
           this.backgroundSize = "100%";
           this.paddingTop = 24;
           this.backgroundColor = 8821927;
           this.backgroundImage = ApplicationBackground;
           this.horizontalAlign = "center";
           this.backgroundGradientAlphas = [1,1];
           this.paddingLeft = 24;
           this.paddingBottom = 24;
           this.paddingRight = 24;
      };

     style.defaultFactory.prototype = chain;
     chain = new style.defaultFactory();
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para traducir el código AS3 a Haxe, puedes usar la notación @:generic para definir una clase genérica que se pueda utilizar con cualquier tipo de objeto, incluyendo funciones. Aquí tienes un ejemplo que muestra cómo replicar el comportamiento de AS3 utilizando Haxe:

    class CSSStyleDeclaration<t> {
      public var defaultFactory(defaults:T -> Void):T;
    }
    
    class StyleChain {
      public var disabledOverlayAlpha(default, null):Float;
      public var borderStyle(default, null):String;
      public var paddingTop(default, null):Int;
      public var verticalAlign(default, null):String;
      public var paddingLeft(default, null):Int;
      public var paddingBottom(default, null):Int;
      public var paddingRight(default, null):Int;
      public var fontWeight(default, null):String;
      public var backgroundSize(default, null):String;
      public var backgroundColor(default, null):Int;
      public var backgroundImage(default, null):String;
      public var horizontalAlign(default, null):String;
      public var backgroundGradientAlphas(default, null):Array<float>;
    }
    
    var style = new CSSStyleDeclaration<stylechain>();
    style.defaultFactory = function(defaults:StyleChain):Void {
      defaults.disabledOverlayAlpha = 0;
      defaults.borderStyle = "controlBar";
      defaults.paddingTop = 10;
      defaults.verticalAlign = "middle";
      defaults.paddingLeft = 10;
      defaults.paddingBottom = 10;
      defaults.paddingRight = 10;
    };
    var chain = new StyleChain();
    style.defaultFactory(chain);
    style.defaultFactory = function(defaults:StyleChain):Void {
      defaults.fontWeight = "bold";
    };
    style.defaultFactory(chain);
    style.defaultFactory = function(defaults:StyleChain):Void {
      defaults.backgroundSize = "100%";
      defaults.paddingTop = 24;
      defaults.backgroundColor = 8821927;
      defaults.backgroundImage = "ApplicationBackground";
      defaults.horizontalAlign = "center";
      defaults.backgroundGradientAlphas = [1.0, 1.0];
      defaults.paddingLeft = 24;
      defaults.paddingBottom = 24;
      defaults.paddingRight = 24;
    };
    style.defaultFactory(chain);
    

    En este código, CSSStyleDeclaration es una clase genérica que toma un parámetro de tipo T, que representa el objeto que contiene las propiedades de estilo. StyleChain es una clase simple que contiene todas las propiedades utilizadas en el código AS3.

    La propiedad defaultFactory de CSSStyleDeclaration es una función que toma un argumento de tipo T y establece sus propiedades predeterminadas. En Haxe, puedes definir un tipo de función con el operador ->, por ejemplo T -> Void, que significa “una función que toma un T y no devuelve nada”.

    Para usar el defaultFactory, creas una instancia del objeto T, como StyleChain, y lo pasas a la función defaultFactory. Cuando se llama a la función, se establecen las propiedades predeterminadas del objeto.

    La palabra clave prototype en AS3 se utiliza para encadenar varias funciones defaultFactory. En Haxe, puedes lograr el mismo comportamiento utilizando una única función defaultFactory que establece todas las propiedades. El objeto chain se pasa a cada invocación para preservar las propiedades establecidas anteriormente.

Comments are closed.