重构一些javascript

Refactor some javascript

本文关键字:javascript 重构      更新时间:2023-09-26

我有两个几乎相同的函数,但我不确定如何重构它,使它们能够共享相同的逻辑。

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);
}
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);
}