簡體   English   中英

AS3:是否可以創建一個變量來保存實例名稱?

[英]AS3: Is it possible to create a variable to hold instance name?

我試圖擁有一個更動態的功能,並希望允許功能實例名稱在其輸出文本可更改的情況下使用。

例如

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

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

這可能嗎?

是的,只需將字符串解析為實例所有者旁邊的方括號即可。 例如:

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

絕對有可能,但是使用這樣的String並不是真正的最佳實踐。 相反,您可以傳遞對要修改的變量的引用。

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM