我可以安全地将null传递给Function.apply来代替thisArg参数吗?

时间:2013-06-06 07:02:17

标签: actionscript-3 flash actionscript

为了使SWF的公共API更可靠,我通常用try / catch块封装回调:

private function addCallback(functionName:String, closure:Function):void {
    ExternalInterface.addCallback(functionName, wrapEventHandler(closure));
}

private function wrapEventHandler(closure:Function):Function {
    var self:Main = this;
    return function(...arguments):* {
        try {
            return closure.apply(self, arguments);
        } catch (error:Error) {
        // Print error report here
        }
    }
}

当'closure'发生异常时,将打印错误报告。

我注意到即使使用'null'代替'self'也能正常工作:

closure.apply(null, arguments);

在这种情况下使用'null'是否安全?

使用ExternalInterface注册的I回调不是静态函数;他们使用Main的类字段。

使用null,NaN和self可以正常工作。我发现使用NaN / null没有任何问题。

1 个答案:

答案 0 :(得分:1)

this参数传递给apply()是可选的,参数默认值为NaN

  

参数

     

thisArg:*(默认= NaN) - 函数所在的对象   应用

同样地,call()

  

您可以为null参数传递值thisObject以调用a   作为常规函数而不是作为对象的方法。

     

例如,以下函数调用是等效的:

Math.sin(Math.PI / 4)   
Math.sin.call(null, Math.PI / 4)