2012-04-17 3 views
0

私はよりダイナミックな機能をしようとしていますが、テキストを変更可能に出力したので、関数のインスタンス名を許可したいと思います。例えばAS3:インスタンス名を保持する変数を作成できますか?

function example_function(url,instance_name){ 
     instance_name.text = url; 
} 

example_function('www.example.com','url_txt'); 
example_function('www.another.com','more_txt'); 

これは可能ですか?

答えて

3

はい、文字列をインスタンスの所有者の横の角かっこで囲んで解析します。たとえば、次のように

this[instance_name].text = url; 

さらに詳しい情報:

このオブジェクトを取る:

obj.property1; 
obj.property2; 

あるいは前述のように:

var obj:Object = { 
    property1: 10, 
    property2: "hello" 
}; 

そのプロパティは、あなたが期待通りのいずれかにアクセスすることができます上記:

obj["property1"]; 
obj["property2"]; 

私は少しあなたのコードを引き締めるために作成したこの1のような機能を使用することをお勧め:

function selectProperty(owner:*, property:String):* 
{ 
    if(owner.hasOwnProperty(property)) return owner[property]; 
    else throw new Error(owner + " does not have a property \"" + property + "\"."); 

    return null; 
} 

trace(selectProperty(stage, "x")); // 0 
trace(selectProperty(stage, "test")); // error 
+0

そして、これは他のMCの中にあった何かのためにどのように動作しますか?例えば、mc.instance_name.text = url;それはこれでしょう[mc]。this [instance_name] .text = url; ?? –

+0

@ Eli.Stone 'mc'と同じスコープにいる場合は、これを行うことができます:' mc [instance_name] .text = url; ' – Marty

+0

そしてクラスファイルから作業していれば? –

0

それは間違いなく可能ですが、それは本当にそのような文字列でそれを行うためのベストプラクティスではありません。代わりに、変更しようとしている変数への参照を渡すことができます。

function example_function(url : String, instance : TextField) : void { 
    instance.text = url; 
} 

example_function("www.example.com", url_txt); 

これは強力なタイピングを提供するので、コンパイル時にTextFieldで操作しているかどうかを知ることができます。そうでない場合は、 'text'プロパティが存在しないため、エラーが発生します。この方法でエラーを見つけて追跡することができます。あなたは文字列でそれを行う必要がある場合

ただし、次のような文字列キー使用して任意のオブジェクトの任意のプロパティにアクセスすることができます。

var myInstance = this[instance_name] 

をだからあなたの例では、あなたが行うことができます:

function example_function(url : String, instance : TextField) : void { 
    this[instance_name].text = url; 
} 

example_function("www.example.com", "url_txt"); 
関連する問題