2011-11-29 50 views
1

我有兩個幾乎相同的函數,但我不確定我如何重構這個,以便他們可以共享相同的邏輯。重構一些javascript

function Content_chkClick(obj) { 
    var frame = $('#iFM')[0]; 

    if (frame.contentWindow.Content_chkClick) { 
     frame.contentWindow.Content_chkClick(obj); 
    } else { 
     $('.TabContent', frame.contentWindow.document).each(function() { 
      var frame = this; 
      if (frame.contentWindow.Content_chkClick) { 
       frame.contentWindow.Content_chkClick(obj); 
      } 
     }); 
    } 
} 

function Content_invokeClickEvent(id) { 
    var frame = $('#iFM')[0]; 

    if (frame.contentWindow.Content_invokeClickEvent) { 
     frame.contentWindow.Content_invokeClickEvent(id); 
    } else { 
     $('.TabContent', frame.contentWindow.document).each(function() { 
      var frame = this; 
      if (frame.contentWindow.Content_invokeClickEvent) { 
       frame.contentWindow.Content_invokeClickEvent(id); 
      } 
     }); 
    } 
} 

最後,我希望能夠做的僅僅是有一些像

function Content_chkClick(obj) { 
    someCommonFunction(Content_chkClick, obj); 
} 
function Content_invokeClickEvent(id) { 
    someCommonFunction(Content_invokeClickEvent, id); 
} 

回答

1
function Content_xClick(fname, obj) { 
    function callIfPossible(frame) { 
     if (frame.contentWindow[fname]) { 
      frame.contentWindow[fname](obj); 
      return true; 
     } 
    } 

    if (!callIfPossible($('#iFM')[0])) { 
     $('.TabContent', $('#iFM')[0].contentWindow.document).each(function() { 
      callIfPossible(this); 
     }); 
    } 
} 

最終,你應該能夠做的就是像

function Content_chkClick(obj) { 
    Content_xClick("Content_chkClick", obj); 
} 
function Content_invokeClickEvent(id) { 
    Content_xClick("Content_invokeClickEvent", id); 
} 
+0

這很好。 – CaffGeek