DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> CSS入門知識 >> CSS詳解 >> IE和Firefox下編寫Javascript的區別(6)
IE和Firefox下編寫Javascript的區別(6)
編輯:CSS詳解     

◆下面介紹一個解決這個麻煩事的方法,與原理.

Javascriptcript中,函數的調用是有一個func.caller這個屬性的.
例如

  1. functionA()
  2. {
  3. B();
  4. }
  5. functionB()
  6. {
  7. alert(B.caller);
  8. }

如果B被A調用,那麼B.caller就是A

◆另外,函數有一個arguments屬性.這個屬性可以遍歷函數當前執行的參數:

  1. functionmyalert()
  2. {
  3. vararr=[];
  4. for(vari=0;i
  5. arr[i]=myalert.arguments[i];
  6. alert(arr.join("-"));
  7. }
  8. alert("hello","world",1,2,3)

就能顯示hello-world-1-2-3
(arguments的個數與調用方有關,而與函數的參數定義沒有任何關系)

根據這兩個屬性,我們可以得到第一個函數的event對象:

  1. btn.onclick=handle_click;
  2. functionhandle_click()
  3. {
  4. showcontent();
  5. }
  6. functionshowcontent()
  7. {
  8. varevt=SearchEvent();
  9. if(evt&&evt.shiftKey)//如果是基於事件的調用,並且shift被按下
  10. window.open(global_helpurl);
  11. else
  12. location.href=global_helpurl;
  13. }
  14. functionSearchEvent()
  15. {
  16. func=SearchEvent.caller;
  17. while(func!=null)
  18. {
  19. vararg0=func.arguments[0];
  20. if(arg0)
  21. {
  22. if(arg0.constructor==Event)//如果就是event對象
  23. returnarg0;
  24. }
  25. funcfunc=func.caller;
  26. }
  27. returnnull;
  28. }

這個例子使用了SearchEvent來搜索event對象.其中'Event'是Firefox的event.constructor.
在該例子運行時,
SearchEvent.caller就是showcontent,但是showcontent.arguments[0]是空.所以func=func.caller時,func變為handle_click.
handle_click被Firefox調用,雖然沒有定義參數,但是被調用時,第一個參數就是event,所以handle_click.arguments[0]就是event!

針對上面的知識,我們可以結合prototype.__defineGetter__來實現window.event在Firefox下的實現:

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved