1

为了使 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 注册的回调不是静态函数;他们使用 Main 的类字段。

它适用于 null、NaN 和 self。我找不到使用 NaN/null 的任何问题。

4

1 回答 1

1

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

参数

thisArg:*(default = NaN) — 应用函数的对象。

同样,call()

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

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

Math.sin(Math.PI / 4)   
Math.sin.call(null, Math.PI / 4)
于 2013-06-06T07:22:32.970 回答