在 as3 中,有一种灵活的方法可以在调用对象实例时更改它。可以使用特定的第一个参数调用函数对象的调用或应用成员,并且引用说我们,这个第一个参数将是函数内部的“this”指针。但我发现它错了。
我写了一些小测试,如下所示。
public class Test
{
private var name:String = "default";
public var test3:Function = test;
public var test2:Function = function()
{
trace(this.name);
}
public function Test(name:String)
{
this.name = name;
}
public function test():void
{
trace(this.name);
}
}
并对其进行了测试。
var tmp:Test = new Test("default");
tmp.test(); //out default
tmp.test.call(new Test("new")); //out default
tmp.test2(); //out default
tmp.test2.call(new Test("new2")); //out new2
tmp.test3(); //out default
tmp.test3.call(new Test("new3")); //out default
因此,在匿名函数调用中,我们可以获得正确的输出,但在成员函数的情况下则不行。也许是因为模棱两可的“this”指针,它应该为正确的工作提供真实的对象实例,也许还有其他的。我现在不知道,as3 参考并没有描述它。
最后列出问题:
- 为什么这样?对我来说,这很奇怪,看起来像是未定义的行为;
- 我怎样才能实现该功能?如何欺骗匿名测试功能?不是调用方法目标吗?
这不是很重要,但我会很高兴任何好的答案。谢谢!
PS对不起我的英语。
//已编辑:将此语句添加到所有“名称”引用中。没有什么变化。