我试图拥有一个更动态的函数,并希望允许函数实例名称输出文本是可变的。
例如
function example_function(url,instance_name){
instance_name.text = url;
}
example_function('www.example.com','url_txt');
example_function('www.another.com','more_txt');
这可能吗?
我试图拥有一个更动态的函数,并希望允许函数实例名称输出文本是可变的。
例如
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
这绝对是可能的,但使用这样的字符串并不是真正的最佳实践。相反,您可以传入对您尝试修改的变量的引用。
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");