2011-11-29 3 views
1

두 개의 거의 동일한 기능을 가지고 있지만 동일한 논리를 공유 할 수 있도록 어떻게 리팩토링 할 수 있는지 잘 모르겠습니다. 무엇 내가 할 수 있어야합니다일부 리팩터링 자바 스크립트

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

관련 문제