对于Function.call() 和Function.apply 再次理解。
参考页面 http://flash006.com/336
在Cairngorm2中曾看到不定参数不能二次传递的bug,后来在使用Adobe的rpc组件时,发现RemoteObject是可以使用不定参数的,而RemoteObject是对NetConnection的封装,那么Adobe是如何做到不定参数的二(N?)次传递的呢?
实现原理很简单,仅是用到了Function对象的apply方法:
-----------------------------------------例子:
package com.test
b.apply(this, args);
b.call(this, args);
}
输出:
a() A,B,C
[SWF] E:\code\game\SceneAvatar2\bin-debug\ParamsTest.swf - 解压缩后为 1,971 个字节
b() A,B,C 是数组吗: false
c() A B C
b() A,B,C 是数组吗: true
ArgumentError: Error #1063: com.test::ParamsTest/c() 的参数数量不匹配。应该有 3 个,当前为 1 个。
b() A,B,C 是数组吗: true
ArgumentError: Error #1063: com.test::ParamsTest/c() 的参数数量不匹配。应该有 3 个,当前为 1 个。
说明:
b.apply(this, args);
b.call(this, args);
只有apply动用成功!
与 Function.call()
(它将参数指定为用逗号分隔的列表)不同,该方法将参数指定为一个 Array 对象。如果在脚本实际执行前,无法知道要传递的参数的数量,那么这种方法通常很有用。