TypeError: Gọi bất hợp pháp trên console.log.apply


129

Nếu bạn chạy cái này trong bảng điều khiển chrome:

console.log.apply(null, [array])

Chrome cung cấp cho bạn một lỗi:

// TypeError: Illegal Invocation

Tại sao? (Đã thử nghiệm trên Chrome 15 qua OSX)

Câu trả lời:


180

Nó có thể không hoạt động trong trường hợp khi bối cảnh thực thi thay đổi từ bàn điều khiển sang bất kỳ đối tượng nào khác:

Điều này được mong đợi bởi vì console.info hy vọng tham chiếu "này" của nó là console chứ không phải window.

console.info("stuff")
stuff
undefined
console.info.call(this, "stuff")
TypeError: Illegal invocation
console.info.call(console, "stuff")
stuff
undefined

Hành vi này được dự kiến.

https://bugs.chromium.org/p/chromium/issues/detail?id=48662


25
Nếu bạn cần sử dụng như một chức năng, bạn có thể sử dụng console.info.bind (bảng điều khiển)
John Williams

3
Vậy bạn có thể sử dụng console.info.call(console, "stuff")trong tất cả các trình duyệt hỗ trợ ES5 không?
mucaho

2
Áp dụng tương tự:console.info.apply(console, arguments)
PeterM

Đối số tương tự áp dụng cho các hàm khác như console.log () và document.writeln (). Vì vậy, luôn cung cấp bối cảnh thực hiện chính xác nếu sử dụng lệnh gọi () hoặc áp dụng (). Cách khác, sử dụng bind () như @JohnWilliams đã chỉ ra.
Alan CS

1
Điều này vẫn có thể áp dụng cho IE11 / Edge khi DevTools F12 không mở.
Benny Bottema
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.