2012-02-10 5 views
0

このスタイルのクロージャー(内部関数)でインスタンス変数にアクセスするにはどうすればいいですか:this['varName']?あなたのクラスがすでに持っているのいずれかdynamicかであると仮定して、プロパティをこのスタイルのクロージャー(内部関数)でインスタンス変数にアクセスするにはどうすればいいですか:this ['varName']?

object[propertyName] 

するか、設定します。

public class Test extends Sprite 
{ 
    private var a0:String = 'a0'; 
    private var a1:String = 'a1'; 
    private var a2:String = 'a2'; 

    public function Test() 
    { 
     var testFun:Function = function(evt:Event):void 
     { 
      for(var i:uint = 0; i < 3; i += 1) 
      { 
       trace(this['a'+i]);//how to access instance variables? 
      } 
     }; 
     this.addEventListener(Event.ENTER_FRAME, testFun); 
    } 
} 

答えて

2

角カッコは、あなたが上やったとおりにObject(すべて)のプロパティにアクセスするために使用することができますあなたが設定しようとしているプロパティ:

object[propertyName] = 10; 

をオブジェクトでは、あなたが実際に出力するPRのすべてをfor(String in Object)ループを使用することができますopertiesしたい:あなたの現在のコードについては

var object:Object = { 
    test: "string", 
    another: 5 
}; 

for(var i:String in object) 
{ 
    trace(i + ": " + object[i]); 
} 

、それを再構築:あなたはあなたの内側の機能を保持しなければならない場合

public class Test extends Sprite 
{ 
    private var a0:String = 'a0'; 
    private var a1:String = 'a1'; 
    private var a2:String = 'a2'; 

    public function Test() 
    { 
     testFun(); 
    } 

    public function testFun():void 
    { 
     for(var i:uint = 0; i < 3; i += 1) 
     { 
      trace(this['a'+i]); 
     } 
    } 
} 

は、へTestのあなたの現在のインスタンスへの参照を解析それ:

var testFun:Function = function(subject:Test):void 
{ 
    for(var i:uint = 0; i < 3; i += 1) 
    { 
     trace(subject['a'+i]);//how to access instance variables? 
    } 
}; 

そして:

testFun(this); 
+0

多くのありがとうございます。私はこれを理解しています。しかし、内部機能のアクセスプロパティが必要です。今は 'this'はクラスインスタンスではありません。 – liupeixin

+1

あなたの内部の機能は*極悪*悪い習慣ですが、私は答えを編集します。 – Marty

+0

@liupeixin編集を参照してください。 – Marty

関連する問題