次のコードがあるとします(まったく役に立たないことはわかっています)
function add( a, b, c, d ) {
alert(a+b+c+d);
}
function proxy() {
add.apply(window, arguments);
}
proxy(1,2,3,4);
基本的に、apply が 2 番目のパラメーターとして配列を想定していることはわかっていますが、それがarguments
適切な配列ではないこともわかっています。コードは期待どおりに動作するので、任意の配列のようなオブジェクトを の 2 番目のパラメーターとして渡すことができると言っても過言ではありapply()
ませんか?
以下も動作します (少なくとも Chrome では):
function proxy() {
add.apply(window, {
0: arguments[0],
1: arguments[1],
2: arguments[2],
3: arguments[3],
length: 4
});
}
更新: IE<9 で 2 番目のコード ブロックが失敗するようですが、最初のコード ブロック ( を渡すarguments
) は機能します。エラーはArray or arguments object expected
であるため、 を渡すことは常に安全であると結論付けarguments
ますが、oldIE で配列のようなオブジェクトを渡すことは安全ではありません。