我正在寫一些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
它不是語言錯誤,但是文檔寫得不好 –