我正在写一些Actionscript3代码,试图将方法应用于在运行时确定的对象。 Function.apply和Function.call的AS3文档都指出这些函数的第一个参数是在执行函数时将用作“this”值的对象。Function.apply不使用thisArg参数
但是,我发现在所有情况下,当被执行的函数是一个方法时,不会使用应用/调用的第一个参数,而'this'总是指该方法所绑定的原始对象。下面是一些示例代码和其输出:
package
{
import flash.display.Sprite;
public class FunctionApplyTest extends Sprite
{
public function FunctionApplyTest()
{
var objA:MyObj = new MyObj("A");
var objB:MyObj = new MyObj("B");
objA.sayName();
objB.sayName();
objA.sayName.apply(objB, []);
objA.sayName.call(objB);
}
}
}
internal class MyObj
{
private var _name:String;
public function MyObj(name:String)
{
_name = name;
}
public function sayName():void
{
trace(_name);
}
}
输出:
A
B
A
A
A小调修改上面的代码来创建一种在线匿名功能,其是指“这个”表明正确当正在应用/调用的函数不是绑定方法时,会发生行为。
我是否在使用方法时使用apply/call不正确?在AS3文件明确规定的代码针对这种情况,但是:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
如果这确实是坏了,有没有变通除了使目标的方法进入功能(这将是相当难看,在我看来)?
如果你需要这种编码,我将不得不说你正在做的事情非常错误。你究竟想通过这样做来完成什么? –
对我进行了测试。看起来像一个错误。尝试在JIRA中搜索:http://bugs.adobe.com/jira/browse如果您没有找到它,请将其提交 – divillysausages
它不是语言错误,但是文档写得不好 –