簡體   English   中英

為什么我不能在開放式工具打開的情況下直接綁定IE9上的console.log?

[英]Why can't I bind directly console.log on IE9 with developer tools open?

在IE9中打開開發人員工具,此代碼可以正常工作:

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

但如果我輸入

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

然后我明白了:

SCRIPT438:對象不支持屬性或方法'bind'

為什么?

這是一個已知的IE錯誤還是正常行為?

它是否會影響其他功能(我對window.alert也沒有問題,也是原生的)?

正如相關答案所說,這只是因為IE中console對象的log功能不會從Function繼承。 它是一個宿主對象,它使用IE認為合適的任何規則。

但這是一個功能。 這就是使用Function.prototype.bind工作的原因,就像使用Array.prototype.forEach在類似數組的對象上工作一樣。 (提示:NodeLists和HTMLCollections。)

它本身並不是一個bug,因為沒有規范談論console對象。 DOM生活標准甚至沒有提到它。 所以每個瀏覽器都以它想要的方式實現這個對象。

它確實意味着window.alert函數遇到了同樣的問題。 我們很幸運,它在瀏覽器中運行良好。

那是IE。 處理它。 雖然IE9遠比IE8好,但它仍然比其他現代瀏覽器差。

console是DOM的擴展,它不是ECMAScript的一部分。 由於它是一個宿主對象,因此不需要從'Object'繼承。 在IE(9和8)中,只有在打開開發人員工具欄時才會顯示控制台。

var log = Function.prototype.bind.call(console.log, console); 
log(60+90);//150

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM