Giả sử tôi đã đoạn mã sau (hoàn toàn vô dụng, tôi biết)Có an toàn để vượt qua 'tranh luận' thành 'apply()'
function add(a, b, c, d) {
alert(a+b+c+d);
}
function proxy() {
add.apply(window, arguments);
}
proxy(1,2,3,4);
Về cơ bản, chúng ta biết rằng áp dụng hy vọng một mảng là tham số thứ hai nhưng chúng tôi cũng biết rằng arguments
không phải là một mảng phù hợp. Mã hoạt động như mong đợi, vì vậy có an toàn khi nói rằng tôi có thể truyền bất kỳ đối tượng giống mảng nào như tham số thứ hai trong apply()
không?
Sau đây cũng sẽ làm việc (trong Chrome ít nhất):
function proxy() {
add.apply(window, {
0: arguments[0],
1: arguments[1],
2: arguments[2],
3: arguments[3],
length: 4
});
}
Cập nhật: Dường như khối mã thứ hai của tôi thất bại trong IE < 9 trong khi người đầu tiên (đi qua arguments
) hoạt động. Lỗi là Array or arguments object expected
, vì vậy chúng tôi sẽ kết luận rằng luôn an toàn khi vượt qua arguments
, trong khi không an toàn để truyền đối tượng giống mảng trong oldIE.
Tại sao _không phải là "an toàn"? – Neal
@Neal well 'arguments' là một con thú khá kỳ lạ, do đó, một số lo lắng về việc sử dụng nó không phải là không hợp lý. Trong trường hợp này tôi không thể tưởng tượng được nó sẽ là vấn đề như thế nào. – Pointy
@Neal, có thể vì 'đối số' không có nhiều phương thức mà Mảng bình thường có và' .apply' có thể muốn sử dụng chúng? – Dogbert