2011-05-25 3 views
1

J'ai toujours trouvé cela intéressant et je n'ai pas encore réussi à le comprendre. Prenez cette classe:AS3: question de portée statique

package 
{ 
    public class SomeClass 
    { 
     private var _myvar:String = "hello"; 

     public static function sayHello():void 
     { 
      trace(_myvar); 
     } 
    } 
} 

Comme nous le savons, cela renvoie une erreur à moins que je déclare _myvar que private static var _myvar

1120: Accès des _myvar de propriété non définie.

Je ne comprends pas complètement pourquoi _myvar n'est pas dans la portée sauf si c'est static. Quelqu'un peut-il fournir une explication facile à comprendre?

Répondre

3

Comme _myvar n'est pas statique, c'est une propriété qui est attachée à une instance de SomeClass, c'est-à-dire qu'elle n'a de sens que chaque fois que vous créez un nouveau SomeClass.

En revanche, une propriété static est attachée à l'objet Class, elle n'existe qu'une seule fois et ne dépend pas de chaque instance de SomeClass créée.

Alors, quand vous essayez d'atteindre _myvar de votre c'est la même chose que d'appeler this._myvar mais vous avez une seule statique propriété et peut avoir plusieurs instances créé sur la TIMELIFE de votre demande, ce qui devrait être la valeur de this dans ce cas?

+0

Cela a plus de sens - étant donné qu'aucune instance de SomeClass n'a été créée, _myvar n'existe pas/n'a pas encore été créé. Est-ce que ça sonne bien? – Marty

+0

@Marty Wallace, oui c'est tout – Patrick