假设我有以下代码(完全没用,我知道)
function add( a, b, c, d ) {
alert(a+b+c+d);
}
function proxy() {
add.apply(window, arguments);
}
proxy(1,2,3,4);
基本上,我们知道 apply 需要一个数组作为第二个参数,但我们也知道这arguments
不是一个正确的数组。代码按预期工作,所以可以肯定地说我可以将任何类似数组的对象作为第二个参数传递给apply()
?
以下内容也可以使用(至少在 Chrome 中):
function proxy() {
add.apply(window, {
0: arguments[0],
1: arguments[1],
2: arguments[2],
3: arguments[3],
length: 4
});
}
更新:似乎我的第二个代码块在 IE<9 中失败,而第一个(通过arguments
)工作。错误是Array or arguments object expected
,因此我们将得出结论,传递 总是安全的arguments
,而在 oldIE 中传递类似数组的对象并不安全。