[英]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);
然后我明白了:
為什么?
這是一個已知的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.