javascript - 在函数调用中展开 ...args 数组

标签 javascript flash actionscript-3 externalinterface

我正在对 JavaScript 方法进行多次 ExternalInterface 调用,并有一个辅助函数来执行此操作:

protected function JSCall( methodName:String, ...args ):void
{
  try
  {
    ExternalInterface.call( methodName, args );
  }
  … etc …
}

然而,这意味着 JavaScript 方法只会传递一个参数——参数数组——这意味着我必须更改 JavaScript 以适应这一点,例如而不是:

function example(argument1, argument2)
{

}

我最终得到:

function example(args)
{
  var argument1 = args[0];
  var argument2 = args[1];
}

我想做的是展开传递给 JSCall 方法的参数数组,以便每个参数都单独传递给 ExternalInterface 调用,这样:

JSCall('example', ['one', 'two'])

工作方式如下:

ExternalInterface.call('example', 'one', 'two')

最佳答案

要使用多个参数从 flash 调用 javascript 函数,您所要做的就是:

ExternalInterface.call.apply(null, [functionName, arg1, arg2, ..., argn]);

如果您从另一个函数的可变参数列表中获取参数,那么您可以使用:

function JSCall(methodName:String, ...args):void
{
    if (ExternalInterface.available){
        args.unshift(methodName);
        ExternalInterface.call.apply(null, args);
    }

    //btw, you can do the same with trace(), or any other function
    args.unshift('Calling javascript function');
    trace.apply(null, args);
}

你会调用其他地方:

JSCall('console.log', 'Testing', 123, true, {foo:'bar'});

...这将在您的 firebug/webkit 控制台上打印类似 Testing 123 true Object 的内容。

这已经过测试并且可以肯定地工作,因为我正在一个真实的项目中使用它。

关于javascript - 在函数调用中展开 ...args 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432462/

相关文章:

javascript - 我可以让 Flash 影片与 Shadowbox jquery 覆盖进行通信吗?

actionscript-3 - ActionScript 3's " move “关键字 : does it exist?

javascript - 修改XMLHttpRequest数据

javascript - 通过拖动节点动态调整 DIV 大小

javascript - 如何在 JavaScript 小部件中正确生成 HTML?

Flash iPhone Packer - iAds

javascript - 从 URL 创建 JavaScript 数组

actionscript-3 - 在没有 AIR 运行时文件的情况下运行 AIR 应用程序

actionscript-3 - 用于 AS3 中匿名函数的 removeEventListener

flash - 使用 JSFL AS3 CS5.5 访问子/嵌套影片剪辑