2012-04-17 61 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; 

更多信息:

把这个对象:

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 
+0

并且这对于另一个MC内部的东西是如何工作的,例如mc.instance_name.text = url;这是[mc] .this [instance_name] .text = url; ?? – 2012-04-17 02:26:40

+0

@ Eli.Stone如果你已经和'mc'在同一个范围内,你可以这样做:'mc [instance_name] .text = url;' – Marty 2012-04-17 02:53:44

+0

如果你从一个类文件中工作? – 2012-04-17 03:01:17

0

这是绝对有可能的,但它是不是真的有这样的字符串来做到这一点的最佳实践。相反,您可以传递对您要修改的变量的引用。

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

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

这给你强大的输入,所以你可以告诉编译时你是否在TextField上操作。如果你不是,你会得到一个错误,因为'文本'属性不存在。您将能够以这种方式更快地找到并追踪错误。

但是,如果必须用绳子做的,你可以在任何物体上使用像字符串键访问任何属性:

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"); 
相关问题