2013-01-09 58 views
7

Với công cụ phát triển mở trong IE9, mã này hoạt động:Tại sao tôi không thể liên kết trực tiếp console.log trên IE9 với các công cụ dành cho nhà phát triển mở?

var log = Function.prototype.bind(console.log, console); 

Nhưng nếu tôi gõ

console.log(console, console.log); 
var log = console.log.bind(console); 

sau đó tôi có được điều này:

SCRIPT438: Object doesn't support property or method 'bind'

Tại sao?

Đó có phải là lỗi IE đã biết hoặc hành vi bình thường không?

Điều này có ảnh hưởng đến các chức năng khác không (tôi không gặp vấn đề với window.alert cũng là bản địa)?

+0

Kiểm tra câu trả lời liên quan này: http://stackoverflow.com/a/5473193/1915183 –

+0

@MarioBellart Câu trả lời khác chủ yếu nói "đó là lỗi". Đúng ? Lỗi này có được tham chiếu ở đâu đó không? –

+0

xin lỗi, không chắc chắn nếu đó là một lỗi và không biết nơi tôi có thể kiểm tra một danh sách lỗi iexplorer đã gửi. Tôi hiểu (được sao chép từ câu trả lời) "Đối tượng giao diện điều khiển không phải là một phần của bất kỳ chuẩn nào và là phần mở rộng cho Mô hình đối tượng tài liệu. Giống như các đối tượng DOM khác, nó được coi là đối tượng lưu trữ và không bắt buộc phải kế thừa từ Object. các phương thức từ hàm "vì vậy tôi suy ra, ràng buộc, gọi hoặc áp dụng, không xác định. –

Trả lời

9

Khi câu trả lời liên quan cho biết, đơn giản là vì hàm log từ đối tượng console trong IE không được kế thừa từ Function. Đó là một đối tượng lưu trữ và nó sử dụng bất kỳ quy tắc nào mà IE thấy phù hợp.

Nhưng nó giống như chức năng. Đó là lý do tại sao sử dụng các tác phẩm Function.prototype.bind, giống như việc sử dụng Array.prototype.forEach hoạt động trên các đối tượng giống mảng. (Gợi ý: NodeLists và HTMLCollections.)

Nó không phải là lỗi, vì không có đặc điểm kỹ thuật nói về đối tượng console. Các DOM living standard thậm chí không đề cập đến nó. Vì vậy, mỗi trình duyệt thực hiện đối tượng này theo cách mà nó muốn.

Và điều đó có nghĩa là chức năng window.alert phải tuân theo cùng một vấn đề. Chúng tôi may mắn rằng nó hoạt động rất tốt trên các trình duyệt.

Đó là IE. Đối phó với nó. Mặc dù IE9 là tốt hơn nhiều so với IE8, nó vẫn còn tồi tệ hơn các trình duyệt hiện đại khác.

+0

Tiêu chuẩn DOM không chỉ định nó nhưng khi một tính năng không hoạt động như mong đợi (ví dụ như một nút quay lại đôi khi đóng một ứng dụng), đó là lỗi (ít nhất là cho khách hàng của tôi). –

+0

@ dystroy vì vậy đó là lỗi theo những gì bạn mong đợi. Thật không may, tham chiếu của IE không phải là bạn. –

5

bảng điều khiển là phần mở rộng của DOM và nó không phải là một phần của ECMAScript. Vì nó là một đối tượng host nên không cần phải kế thừa từ 'Object'. Trong bảng điều khiển IE (9 & 8) chỉ hiển thị khi thanh công cụ của nhà phát triển được mở.

var log = Function.prototype.bind.call(console.log, console); 
log(60+90);//150 
Các vấn đề liên quan