有没有办法通过它的UID获取对象,以便以下代码可以工作?
当函数完成时,property" xxx"应该是"字符串二"不是"字符串一"。
// Test class
public function test():void {
this.xxx = "string one";
foo.bar(this.xxx);
trace(this.xxx); // Prints: string two
}
// Foo class
public function bar(value:*):void {
// ... What would I have to do here to get the property, not its value?
value = "string two";
}
答案 0 :(得分:0)
无法更改函数的参数(对变量的引用)。它不是指针。您可以为其分配其他变量,但不会更改传递给该函数的参数。但是你可以改变参数的属性:
class Test {
public var xxx:String;
public function test():void {
this.xxx = "string one";
foo.bar(this);
trace(this.xxx); // Prints: string two
}
}
class Foo {
public function bar(test:Test):void {
test.xxx = "string two";
}
}
当然,为了实现这一目标,班级Foo
必须知道Test
以及要更改的属性。这使得一切都不那么动态,也许不是你想要的。这是一个你可以使用Interface
的情况。或者您可能希望坚持使用常见模式,例如使用getter并将值分配给适当的属性:
class Test {
public var xxx:String;
public function test():void {
this.xxx = "string one";
this.xxx = foo.getValue();
trace(this.xxx); // Prints: string two
}
}
class Foo {
public function getValue():String{
return "string two";
}
}
答案 1 :(得分:0)
使用Box括号怎么样?我知道这不是OO做事的方式,但Action脚本支持它,它看起来像是一个很好的选择。
class Test {
public var xxx:String;
public function test():void {
this.xxx = "string one";
foo.bar(this,"xxx"); // actual name of property as string ;litral
trace(this.xxx); // Prints: string two
}
}
class Foo {
public function bar(test:*,prop:String):void {
//test could be from any class .
test[prop] = "string two";
}
}
这应该可以解决问题。但是你需要确保调用“bar”方法的代码传递一个有效的对象,该对象具有定义的“xxx”属性,因为此代码不再是类型安全的。
答案 2 :(得分:0)
要获取属性,最简单的方法是将属性封装到对象中,将其传递给函数,然后检索它:
// Test class
public function test():void {
var obj: Object = new Object();
obj.variable = "string one";
foo.bar(obj);
trace(obj.variable); // Prints: string two
}
// Foo class
public function bar(value:Object):void {
value.variable = "string two";
}
但你为什么要这样做呢?只需做xxx = foo.bar();
答案 3 :(得分:0)
传递由值:
将变量传递给函数时,会复制变量。退出后,您对变量所做的任何更改都不会反映出来。
传递通过引用:
将变量传递给函数时,会传递变量的“指针”。您对变量所做的任何更改都将被复制。
在AS3中,所有内容都是按引用传递,除了基元(Boolean,String,int,uint等),它们在幕后具有特殊操作符,使它们像传递一样-值。由于xxx
是一个字符串,这就是正在发生的事情。 (另外,字符串是不可变的;你实际上不能改变它们的值。)
如何修复它(正如其他人所说):
Test
对象本身传递给bar()
函数:bar( this );
xxx
参数封装在自己的对象中并传递:bar( {prop:this.xxx} );
bar()
返回值并设置它:this.xxx = bar();