0

より動的な関数を作成しようとしていますが、関数のインスタンス名がテキストを出力する場合に変更できるようにしたいと考えています。

例えば

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

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

これは可能ですか?

4

2 に答える 2

3

はい、インスタンスの所有者の横にある角かっこに文字列を解析するだけです。例えば:

this[instance_name].text = url;

より詳しい情報:

このオブジェクトを取ります:

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

そのプロパティには、予想どおり次のいずれかでアクセスできます。

obj.property1;
obj.property2;

または上記のように:

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

コードを少し引き締めるために、私が作成した次のような関数を使用することをお勧めします。

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
于 2012-04-17T02:07:34.223 に答える
0

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

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

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

これにより強い型付けが可能になるため、コンパイル時にTextFieldを操作しているかどうかを判断できます。そうでない場合は、「text」プロパティが存在しないため、エラーが発生します。この方法で、エラーをすばやく見つけて追跡できるようになります。

ただし、Stringsで行う必要がある場合は、次のような文字列キーを使用して、任意のオブジェクトの任意のプロパティにアクセスできます。

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");
于 2012-04-17T02:13:04.343 に答える