2013-01-09 30 views
7

隨着開發者工具打開IE9中,此代碼的工作:爲什麼我無法直接綁定IE9上的console.log並且開放式工具打開?

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

但如果我鍵入

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

然後我得到這樣的:

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

爲什麼?

這是一個已知的IE bug或正常行爲嗎?

它影響其他功能(我沒有問題window.alert這也是本地的)?

+0

入住此相關的答案:http://stackoverflow.com/a/5473193/1915183 –

+0

@MarioBellart對方回答說,主要是「這是一個錯誤」。對 ?這個錯誤引用了什麼地方? –

+0

抱歉,不知道它是否是一個錯誤,不知道我可以在哪裏檢查提交的iexplorer錯誤列表。我理解(從答案中複製)「控制檯對象不是任何標準的一部分,它是文檔對象模型的擴展,與其他DOM對象一樣,它被認爲是一個宿主對象,不需要從Object繼承,也不需要函數的方法「,所以我推斷,綁定,作爲調用或應用,都是未定義的。 –

回答

9

正如相關答案所說,這僅僅是因爲IE中的console對象的log函數不會從Function繼承。它是一個主機對象,它使用IE認爲合適的任何規則。

但它是一個功能。這就是爲什麼使用Function.prototype.bind的原理,就像使用Array.prototype.forEach處理類似數組的對象一樣。 (提示:NodeLists和HTMLCollections。)

它本身並不是一個bug,因爲沒有關於console對象的規範。 DOM living standard甚至沒有提到它。所以每個瀏覽器都以它想要的方式實現這個對象。

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

這就是IE。處理它。儘管IE9遠遠好於IE8,但它仍然比其他現代瀏覽器差。

+0

DOM標準沒有指定它,但是當一個功能不能按預期工作時(例如有時關閉應用程序的後退按鈕),這是一個錯誤(至少對我的客戶而言)。 –

+0

@dystroy所以這是一個根據你的期望的錯誤。不幸的是,IE的參考不是你。 –

5

控制檯是DOM的擴展,它不是ECMAScript的一部分。由於它是一個宿主對象,它不需要從'Object'繼承。在IE(9 & 8)中,控制檯僅在開發人員工具欄打開時暴露。

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