2016-12-07 44 views
1

我試圖調用.call IE7中的document.attachEvent功能原型方法。但它顯示爲未定義。 我也查了typeof document.attachEvent,應該顯示爲function,但它是object。 有人可以解釋它爲什麼?IE7:調用未定義document.attachEvent函數

document.attachEvent.call(this, 'onclick', function() {}); 

收到此錯誤

Error: Object doesn't support this property or method 
+1

爲什麼在調用'attachEvent'時需要設置一個特定的'this'?感覺像X/Y問題。我已經回答Y(「attachEvent」怎麼回事?),但我懷疑你真的需要X的答案,這讓你想要做這件事... –

+0

嗨,@TJCrowder,我加了太多所以不要讓複製代碼重複兩次,一次使用'document.addEventListener',另一次使用'document.attachEvent'。因此,只需爲這些函數分配一個局部變量,然後使用'.call'添加事件。無論如何,我會找到另一種方法 –

+0

我會使用一個包裝器方法來標準化東西,像[這個版本的'hookEvent'](http://stackoverflow.com/questions/23799296/js-li-tag-onclick-not (在ie8/23799448#23799448上),它處理與'attachEvent'有關的各種問題(比如''on''部分,事實上過時的瀏覽器上的事件對象沒有'preventDefault'或' stopPropagation' [雖然他們有這個功能,只是不是標準的API],等等。) –

回答

1

主機提供的功能不要求是正確的JavaScript函數,只要它們可以被調用。這意味着它們不需要繼承Function.prototype(因此可能沒有callapply,它們來自Function.prototype),並且typeof可能不會將它們標識爲函數(因爲從JavaScript的角度來看,它們是可調用的,它們是不是功能)。

並非所有過時的瀏覽器都具有功能正常的功能,包括IE7。

+0

哦,我不知道。 info – Li357

+1

@AndrewLi:不用擔心。主機提供的*對象*也可能很奇怪。 :-)但現在,現代瀏覽器大多提供真正的功能,至少*主要是真實的對象。 –