Flash AS3 Globale Variablen?


Answers

testGlobal ist keine globale Variable, sondern eine öffentliche Instanzvariable der Main Klasse. Sie können nicht darauf zugreifen, ohne ein Hauptklassenobjekt zu verwenden, da ohne ein Objekt keine Existenz für eine Eigenschaft existiert. Instanzvariablen sind an Objekte gebunden.

Wenn Sie auf eine Eigenschaft zugreifen möchten, die nicht an eine bestimmte Objektinstanz gebunden ist, deklarieren Sie sie als static .

//Main.as
package {
    public class Main {
        public static var testGlobal:string = "testValue";
    }
}


//Pop.as
package {
    public class Pop {
        function pop():void {
                trace("testGloabl from Main.as" + Main.testGlobal);
        }
    }
}
Question

HI ich habe eine Hauptklasse

//main.as

package {
    public class main {
        public var testGlobal:string = "testValue";

    }
}


//pop.as

package {
    public class pop {
        function pop():void {
            trace("testGloabl from main.as" + testGlobal);
        }
    }
}

Wie kann ich den Wert von testGlobal für pop.as width out mit einem Hauptklassenobjekt ermitteln? Gibt es eine Methode von Global Variablen ??

Verwendung von globalen Variablen in AS3




Sie können das Schlüsselwort _global verwenden ...

Beispiel: Eine Datei namens "_global.as" mit diesem Code:

public var _global:* = activateGlobals();

public function activateGlobals():*{
    if(_global == null){
        _global = this;
    }
    return _global;
}

Dann kannst du _global wie folgt in einer Klasse testen, zB "Main2.as" (hab Spaß):

package classes {
import flash.display.Sprite;
public class Main2 extends flash.display.Sprite{
    include "_global.as";
    var globalMethod:Function;
    var globalID;
    var globalValue:Number;
    var innerMethod:Function;
    var factorial:Function;
    var prototype = Main2.prototype;
    Main2.prototype.globalID = "globalIDprototype";
    Main2.prototype.globalValue = Math.PI*2;
    public function Main2() {
        _global.factorial = function(n:Number) { 
            if (n<=1) { 
                return 1; 
            } else { 
                return n*_global.factorial(n-1); 
            } 
        } 
        prototype.setPropertyIsEnumerable("globalID",true);
        _global.globalMethod = function(){
            trace("Use of the _global method \"globalMethod()\"");
        }
        _global.globalID = "_global id";
        _global.globalValue = Math.PI;
        _global.globalMethod();
        // access properties :
        trace(_global.globalID);
        trace(_global.globalValue);
        trace(prototype.globalID);
        trace(prototype.globalValue);
        listValues();
        getNameInInnerMethod();
        _global.globalMethod();
        getNameInInnerMethod();
    }

    private function listValues():void{
        for(var i in prototype){
            trace(" - prototype[" + i + "] = " + prototype[i]);
        }
        for(i in _global){
            trace(" - _global[" + i + "] = " + _global[i]);
        }
        i = null; // optionnal
    }
    private function getNameInInnerMethod():void{
        _global.globalMethod = function(){
            trace("this.name = " + this.name);
            trace("_global.name = " + _global.name);
        }
        function innerMethod():void{
            trace("this.name = " + this.name);
            trace("_global.name = " + _global.name);
            // with global you have access to the name property from the inner method.
        }
        innerMethod();
    }
}
}



//main.as

package {
    public class main {
        public var testGlobal:string = "testValue";

    }
}


//pop.as

package {

public class pop {
    function pop():void {
        trace("testGlobal from main.as -- " + new main().testGlobal);
        // or
        var m : main = new main();
        trace(m.testGlobal);
    }
}



Sie können das statische verwenden, wie es vorher gesagt wurde, oder Sie können das Singleton-Muster verwenden. Es gibt keine privaten Konstruktoren in AS. Was Sie also tun können, ist: a) Seien Sie sehr vorsichtig, den Konstruktor nicht aufzurufen. B) Senden Sie immer dann eine Ausnahme, wenn jemand den Konstruktor aufruft und die Instanz bereits gesetzt wurde.

Ich glaube nicht, dass es tatsächliche globale Variablen gibt - aber ich verstehe nicht, warum Sie welche benötigen. Wenn Sie möchten, dass eine Variable in der Klasse von außen modifizierbar ist, dann deklarieren Sie sie nur statisch, und führen Sie dann className.variableName = aus.




Related