在函数调用中展开 ...args 数组
我正在对 JavaScript 方法进行大量的ExternalInterface 调用,并有一个辅助函数来执行此操作:
protected function JSCall( methodName:String, ...args ):void
{
try
{
ExternalInterface.call( methodName, args );
}
… etc …
}
但这意味着 JavaScript 方法只会传递一个参数 - 参数数组 - 这意味着我必须更改 JavaScript 来适应这一点,例如of:
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')
I'm making numerous ExternalInterface calls to JavaScript methods and have a helper function for doing so:
protected function JSCall( methodName:String, ...args ):void
{
try
{
ExternalInterface.call( methodName, args );
}
… etc …
}
However this means the JavaScript method will only be passed one argument - the array of arguments - meaning I have to change the JavaScript to accomodate this, e.g. instead of:
function example(argument1, argument2)
{
}
I end up with:
function example(args)
{
var argument1 = args[0];
var argument2 = args[1];
}
What I'd love to do is unroll the arguments array being passed to the JSCall
method so that each argument is passed individually to the ExternalInterface
call, such that:
JSCall('example', ['one', 'two'])
works like:
ExternalInterface.call('example', 'one', 'two')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要从 flash 调用具有多个参数的 javascript 函数,您所要做的就是:
如果您从另一个函数的参数变量列表中获取参数,那么您可以使用:
在其他地方您会调用:
...which会在 firebug/webkit 控制台上打印类似
Testing 123 true Object
的内容。这已经过测试并且肯定有效,因为我正在实际项目中使用它。
To call a javascript function from flash with multiple arguments, all you have to do is:
If you're taking the arguments from a variable list of arguments of another function, then you can use:
Somewhere else you would call:
...which would print something like
Testing 123 true Object
on your firebug/webkit console.This is tested and works for sure, as I'm using it in a real project.
嘿,Cameron,你尝试过使用 Function.apply() 吗?试试这个:
这太疯狂了,它可能会起作用!
Hey Cameron, have you tried using Function.apply()? Try this:
It's so crazy, it just might work!
在 JavaScript 中,此
Function.call.apply(foo, [that, test, bla])
的工作方式类似于foo.call(that, test, bla)
但因为ExternalInterface.call
不等于Function.prototype.call
我们需要在这里使用不同的方法。注意:我还没有在 ActionScript 中对此进行测试。
In JavaScript this
Function.call.apply(foo, [that, test, bla])
works likefoo.call(that, test, bla)
but sinceExternalInterface.call
is not equal toFunction.prototype.call
we need to use a different approach here.Note: I have not tested this in ActionScript.